package jnpf.attendance.service;

import jnpf.base.service.SuperService;
import jnpf.entity.attendance.AttendanceAppUserSetting;
import jnpf.model.attendance.dto.AppUserSettingQueryDto;
import jnpf.model.attendance.dto.AttendanceAppUserSettingDto;
import jnpf.model.attendance.vo.UserSettingVo;

import java.util.List;

/**
 * @Author huanglinpan
 * @Date 2024/8/8 10:54
 * @Version 1.0 （版本号）
 */
public interface AttendanceUserSettingService extends SuperService<AttendanceAppUserSetting> {
    /**
     * 修改设置
     * @param attendanceAppUserSettingDto 修改设置信息
     */
    void saveOrUpdate(AttendanceAppUserSettingDto attendanceAppUserSettingDto);

    /**
     * 查询设置列表
     * @param appUserSettingQueryDto 查询信息
     */
    List<UserSettingVo> getList(AppUserSettingQueryDto appUserSettingQueryDto);

    /**
     * 查询设置列表
     * @param associationId 关联Id（与类型一起使用，个人时表示用户Id，考勤组时表示考勤组Id）
     * @param type 类型 1：个人设置，2：考勤组设置
     * @param code 编码
     */
    List<UserSettingVo> getSettingList(String associationId, Integer type, String code);

    /**
     * 查询设置列表
     * @param associationId 关联Id（与类型一起使用，个人时表示用户Id，考勤组时表示考勤组Id）
     * @param type 类型 1：个人设置，2：考勤组设置
     * @param code 编码
     */
    List<UserSettingVo> getSettingList(List<String> associationId, Integer type, String code);

    /**
     * 查询设置列表
     * @param associationId 关联Id（与类型一起使用，个人时表示用户Id，考勤组时表示考勤组Id）
     * @param type 类型 1：个人设置，2：考勤组设置
     * @param code 编码
     */
    List<UserSettingVo> getSettingList(List<String> associationId, Integer type, List<String> code);

    /**
     * 校验web设置
     * @param code 编码
     */
    UserSettingVo checkWebSetting(String code);

    /**
     * 刷新用户定时提醒缓存
     * @param userId 用户id
     * @param value 值
     * @param tenantId 租户id
     */
    void refreshRemindRedisCache(String code, String userId, Integer value, String tenantId);

    /**
     * 批量保存设置
     * @param attendanceAppUserSettingDto 保存数据
     */
    void saveOrUpdateList(List<AttendanceAppUserSettingDto> attendanceAppUserSettingDto);

    /**
     * 获取新的用户设置列表
     * 本方法用于根据查询条件获取用户设置的列表信息，以便在界面上展示或者进一步处理
     *
     * @param appUserSettingQueryDto 查询条件对象，包含查询用户设置所需的参数
     * @return 返回一个UserSettingVo对象的列表，表示查询到的用户设置信息
     */
    List<UserSettingVo> getListNew(AppUserSettingQueryDto appUserSettingQueryDto);

}
