package jnpf.attendance.service;

import com.github.pagehelper.PageInfo;
import jnpf.base.vo.PageListVO;
import jnpf.dto.PageDto;
import jnpf.exception.HandleException;
import jnpf.model.attendance.dto.MachineDto;
import jnpf.model.attendance.dto.MachineQueryDto;
import jnpf.model.attendance.dto.MachineUpdateDto;
import jnpf.model.attendance.vo.AttendanceMachineManageVo;
import jnpf.model.attendance.vo.MachineScopeVo;
import jnpf.model.attendance.vo.attendance.GroupMiniVo;
import jnpf.model.attendance.vo.attendance.GroupUserMiniVo;
import jnpf.model.attendance.vo.attendance.LogMiniVo;

import java.util.List;

/**
 * 考勤机管理服务
 *
 * @author yanwenfu
 * @create 2024-09-10
 */
public interface AttendanceMachineManageService {

    /**
     * 考勤机管理 - 考勤组列表
     * @param machineId 考勤机id
     * @return java.util.List<jnpf.model.attendance.vo.attendance.GroupMiniVo>
     */
    List<GroupMiniVo> getGroupList(String machineId);

    /**
     * 考勤机管理 - 考勤机列表
     * @param queryDto 查询条件
     * @return jnpf.base.vo.PageListVO<jnpf.model.attendance.vo.AttendanceMachineManageVo>
     */
    PageListVO<AttendanceMachineManageVo> getMachineList(MachineQueryDto queryDto);

    /**
     * 移除考勤机关联的考勤组
     *
     * @param groupIds 需要移除关联的考勤组
     * @param moveTo   移动到哪个考勤组
     * @param userIds  需要移动的成员
     */
    void removeMachineRelation(List<String> userIds, String moveTo, List<String> groupIds);

    /**
     * 考勤机管理 - 添加考勤机
     * @param machineDto 考勤机信息
     */
    void addMachine(MachineDto machineDto) throws HandleException;

    /**
     * 考勤机管理 - 编辑考勤机
     * @param id 考勤机id
     * @param machineUpdateDto 考勤机信息
     */
    void updateMachine(String id, MachineUpdateDto machineUpdateDto) throws HandleException;

    /**
     * 考勤机管理 - 移除
     * @param id 考勤机id
     */
    void deleteMachine(String id) throws HandleException;

    /**
     * 考勤机管理 - 考勤组成员列表/考勤变更人员查询
     * @param groupId 考勤组id
     * @return java.util.List<jnpf.model.attendance.vo.attendance.GroupUserMiniVo>
     */
    List<GroupUserMiniVo> getGroupUserList(String groupId);

    /**
     * 考勤机管理 - 人脸库
     * @param id 考勤机id
     * @return java.util.List<jnpf.model.attendance.vo.attendance.GroupUserMiniVo>
     */
    List<GroupUserMiniVo> getMachineMemberList(String id);

    /**
     * 查询考勤机打卡记录(查往前3个月的数据)
     * @param id 考勤机id
     * @param pageQuery 分页
     * @return com.github.pagehelper.PageInfo<jnpf.model.attendance.vo.attendance.LogMiniVo>
     */
    PageInfo<LogMiniVo> getLogList(String id, PageDto pageQuery);

    /**
     * 同步考勤机成员
     * @param id 考勤机id
     */
    List<GroupUserMiniVo> syncMachineMemberData(String id);

    /**
     * 考勤机管理 - 查询考勤机更新信息
     * @param id 考勤机id
     * @return jnpf.model.attendance.vo.MachineScopeVo
     */
    MachineScopeVo getUpdateDetail(String id);
}
