package jnpf.attendance.service;

import com.github.pagehelper.PageInfo;
import jnpf.entity.attendance.AttendanceFestivalRules;
import jnpf.model.attendance.dto.AttendanceFestivalRulesDto;
import jnpf.model.attendance.dto.FestivalDto;
import jnpf.model.attendance.dto.FestivalRulesQueryDto;
import jnpf.model.attendance.vo.attendance.AttendanceFestivalRulesVo;

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

public interface AttendanceFestivalRulesService {

    /**
     * 列表
     * @param queryDto 查询条件
     * @return 列表
     */
    PageInfo<AttendanceFestivalRulesVo> getPageList(FestivalRulesQueryDto queryDto);

    /**
     * 新增
     * @param festivalRulesDto 参数
     */
    void add(AttendanceFestivalRulesDto festivalRulesDto) throws Exception;


    void statutoryUpdate(String year);

    /**
     * 修改
     * @param festivalRulesDto 参数
     */
    void update(AttendanceFestivalRulesDto festivalRulesDto) throws Exception;

    /**
     * 详情
     * @param id 主键值
     */
    AttendanceFestivalRulesVo detail(String id);

    /**
     * 删除
     * @param id 主键值
     */
    void delete(String id);

    /**
     * 更新状态
     * @param festivalRulesDto festivalRulesDto
     */
    void updateState(AttendanceFestivalRulesDto festivalRulesDto);

    /**
     * 检查规则
     * @param date 日期
     * @param userId 用户ID
     * @return  boolean
     */
    boolean checkFestivalRules(Date date, String userId);

    /**
     * 批量[多用户]判定日期内是否节假日
     * @param date 日期
     * @param userIds 用户ID
     * @return java.util.Map<java.lang.String,java.util.Map>
     */
    Map<String, Map<String, FestivalDto>> checkFestivalRulesBatch(Date date, List<String> userIds);

    /**
     * 批量检查规则
     * @param date 日期
     * @param userIds 用户ID列表
     * @return  boolean
     */
    Map<String, Boolean> batchCheckFestivalRules(Date date, List<String> userIds);

    /**
     * 批量获取用户指定时间区间内的所有节假日
     * @param start 开始时间
     * @param end 结束时间
     * @param userIds 用户ID列表
     * @return java.util.Map<java.lang.String,java.util.List<jnpf.entity.attendance.AttendanceFestivalRules>>
     */
    Map<String, List<AttendanceFestivalRules>> batchGetFestivalRulesByUserIds(Date start ,Date end, List<String> userIds);
}
