package jnpf.attendance.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
import jnpf.entity.AttendanceGroup;
import jnpf.entity.attendance.AttendanceFestivalSettingEntity;
import jnpf.base.service.SuperService;
import jnpf.exception.HandleException;
import jnpf.model.attendance.dto.AttendanceFestivalSettingDto;
import jnpf.model.attendance.vo.AttendanceFestivalSettingVo;
import jnpf.model.attendance.vo.HolidayOptionVo;

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

/**
 * <p>
 * 考勤配置-节日配置 服务类
 * </p>
 *
 * @author ahua
 * @since 2023-11-29
 */
public interface AttendanceFestivalSettingService extends SuperService<AttendanceFestivalSettingEntity> {

    /**
     * 保存节日设置信息。
     *
     * @param attendanceFestivalSettingDto 节日设置数据传输对象
     * @throws HandleException              处理异常
     */
    void save(AttendanceFestivalSettingDto attendanceFestivalSettingDto) throws HandleException;

    /**
     * 分页查询节日设置信息。
     *
     * @param groupId                       考勤组ID
     * @param year                          年份
     * @param page                          页码
     * @param size                          每页大小
     * @return                              分页的节日设置视图对象
     * @throws HandleException              处理异常
     */
    PageDTO<AttendanceFestivalSettingVo> page(String groupId, String year, Integer page, Integer size) throws HandleException;

    /**
     * 根据ID获取单个节日设置信息。
     *
     * @param id                            节日设置ID
     * @return                              节日设置视图对象
     */
    AttendanceFestivalSettingVo getOne(String id);

    /**
     * 删除指定的节日设置信息。
     *
     * @param id                            节日设置ID
     */
    void del(String id);

    /**
     * 获取启用状态的节日设置信息。
     *
     * @param groupIds                      考勤组ID列表
     * @param attendanceGroupVos            考勤组视图对象列表
     * @return                              启用的节日设置信息映射
     */
    Map<String, List<AttendanceFestivalSettingEntity>> getEnableFestivalSetting(List<String> groupIds, List<AttendanceGroup> attendanceGroupVos);

    /**
     * 自动授予假期余额。
     */
//    void autoGrantBalance();

    /**
     * 更新法定节日信息。
     *
     * @param groupId                       考勤组ID
     * @param year                          年份
     */
    void statutoryUpdate(String groupId, String year);

    /**
     * 更新节日设置信息的启用状态。
     *
     * @param id                            节日设置ID
     * @param enable                        启用状态（0禁用，1启用）
     * @throws HandleException              处理异常
     */
    void updateStatus(String id, Integer enable) throws HandleException;

    /**
     * 初始化节日设置。
     *
     * @param groupId                       考勤组ID
     */
    void initFestivalSetting(String groupId);

    /**
     * 获取节日选项列表。
     *
     * @param groupId                       考勤组ID
     * @return                              节日选项视图对象列表
     */
    List<HolidayOptionVo> getHolidayOptions(String groupId);

}
