package jnpf.attendance.service;

import jnpf.attendance.annotation.Machine;
import jnpf.base.service.SuperService;
import jnpf.entity.attendance.AttendanceMachineManage;
import jnpf.enums.attendance.ActionEnum;
import jnpf.enums.attendance.MachineEnum;
import jnpf.model.attendance.vo.attendance.UserTenantVo;
import jnpf.permission.model.user.PartUserInfoVo;

import java.util.List;
import java.util.Map;

/**
 * 考勤机服务
 *
 * @author yanwenfu
 * @create 2023-11-29
 */
public interface AttenceMachineService extends SuperService<AttendanceMachineManage> {

    /**
     * 发送用户到设备
     * @param userId 用户id
     * @param sn 设备号
     * @param code 厂商编码
     */
    void sendUserToMachine(String code, String userId, String sn);

    /**
     * 发送用户到设备
     * @param user 用户信息
     * @param sn 设备号
     * @param code 厂商编码
     */
    void sendUserToMachine(String code, PartUserInfoVo user, String sn);

    /**
     * 更新考勤机用户信息
     * @param sn 设备号
     * @param userId 用户id
     * @param userName 用户名称
     */
    void updateUserInfoByWebsocket(String sn, String userId, String userName);

    /**
     * 删除人员
     * @param sn 设备号
     * @param userId 用户id
     */
    void deleteUser(String sn, String userId);

    /**
     * 批量删除人员
     * @param sn 设备号
     * @param userIds 用户ids
     */
    void deleteUserList(String code, String sn, List<String> userIds);

    /**
     * 更新用户信息
     * @param params 参数
     * @return java.util.Map<java.lang.String, java.lang.Object>
     */
    Map<String, Object> updateUserInfoPhoto(Map<String, Object> params);

    /**
     * 修改图片
     * 此方法用于执行图片的修改操作它可能涉及从一个源获取图片数据，
     * 应用一些转换或更新，并将修改后的图片保存回原始位置或新位置
     * 具体的实现细节在这个方法内部，包括如何获取、修改和保存图片，
     * 依赖于进一步的代码实现
     *
     * @return String 返回一个字符串，可能包含修改后的图片的路径、URL或状态信息
     */
    String changeImg();

    /**
     * 考勤机打卡
     * @param sn 设备号
     * @param userId 用户id
     * @param tenantId 租户id
     * java.lang.String
     */
    String machineClockIn(String sn, String userId, String tenantId, String clockInId) throws Exception;

    /**
     * 打卡/更新打卡
     * @param sn 设备号
     * @param userId 用户id
     * @param tenantId 租户id
     * @return boolean 是否成功
     */
    String clockIn(String sn, String userId, String tenantId);

    /**
     * 更新用户照片
     * @param userId 用户id
     * @param photoUrl 照片
     */
    void updateKeMiPhoto(String userId, String photoUrl, String tenantId);

    /**
     * 科密考勤机打卡
     * @param userTenant 用户租户信息
     * @param devId 设备id
     * @param tenantId 租户id
     */
    void KeMiClockIn(UserTenantVo userTenant, String devId, String tenantId);
}
