package jnpf.attendance.service;

import jnpf.base.service.SuperService;
import jnpf.entity.attendance.AttendanceLocationSetting;
import jnpf.exception.HandleException;
import jnpf.model.attendance.dto.AttendanceLocationSettingDto;
import jnpf.model.attendance.dto.SaveForStoreDto;
import jnpf.model.attendance.vo.AttendanceGroupVo;
import jnpf.model.attendance.vo.AttendanceLocationSettingVo;

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

/**
 * <p>
 * 考勤组-考勤点配置表 服务类
 * </p>
 *
 * @author ahua
 * @since 2023-11-29
 */
public interface AttendanceLocationSettingService extends SuperService<AttendanceLocationSetting> {

    /**
     * 根据考勤组ID和类型查询考勤地点设置列表。
     *
     * @param groupId        考勤组ID
     * @param type           类型（用于筛选设置）
     * @return 考勤地点设置视图对象列表
     */
    List<AttendanceLocationSettingVo> findList(String groupId, Integer type);

    /**
     * 根据门店信息保存考勤点数据
     * @param saveForStore 存储门店信息
     */
    void saveForStore(SaveForStoreDto saveForStore);

    /**
     * 根据门店id集合删除考勤点信息
     * @param saveForStore 存储门店信息
     */
    void delForStore(SaveForStoreDto saveForStore);

    /**
     * 获取当前考勤组考勤点关联门店id
     * @param groupId 考勤组ID
     * @return 门店id集合
     */
    List<String> getStoreIds(String groupId);

    /**
     * 保存考勤地点设置信息。
     *
     * @param dto            考勤地点设置数据传输对象
     * @throws HandleException 处理异常
     */
    void save(AttendanceLocationSettingDto dto) throws HandleException;

    /**
     * 将单个用户添加到设备上。
     *
     * @param groupId       考勤组ID
     * @param userId        用户ID
     */
    void sendSingleUserToMachine(String groupId, String userId);

    /**
     * 从设备上删除单个用户。
     *
     * @param groupId       考勤组ID
     * @param userId        用户ID
     */
    void deleteUserToMachine(String groupId, String userId);

    /**
     * 初始化考勤地点设置。
     *
     * @param groupId       考勤组ID
     */
    void initLocationSetting(String groupId);

    /**
     * 获取启用的考勤地点设置信息。
     *
     * @param groupIds       考勤组ID列表
     * @return 启用的考勤地点设置映射
     */
    Map<String, List<AttendanceLocationSetting>> getEnableLocationSetting(List<String> groupIds);

    /**
     * 获取启用的考勤组信息。
     *
     * @param groupId       考勤组ID
     * @return 启用的考勤组视图对象列表
     */
    List<AttendanceGroupVo> getEnableGroup(String groupId);

    /**
     * 删除指定的考勤地点设置信息。
     *
     * @param id            考勤地点设置ID
     */
    void del(String id);

    /**
     * 更改考勤地点设置的启用状态。
     *
     * @param groupId       考勤组ID
     * @param type          类型（用于区分设置类型）
     * @param enable        启用状态（0禁用，1启用）
     */
    void changeStatus(String groupId, Integer type, Integer enable);

    void hisLocationSetting(Map<String, String> group2orgMap, Map<String, String> org2GroupMap);
}
