package jnpf.attendance.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
import jnpf.entity.AttendanceGroup;
import jnpf.entity.attendance.AttendanceHolidaySettingEntity;
import jnpf.base.service.SuperService;
import jnpf.model.attendance.dto.AttendanceHolidaySettingDto;
import jnpf.model.attendance.vo.AttendanceHolidaySettingVo;

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

/**
 * <p>
 * 考勤配置-假日设置 服务类
 * </p>
 *
 * @author ahua
 * @since 2023-11-29
 */
public interface AttendanceHolidaySettingService extends SuperService<AttendanceHolidaySettingEntity> {
    /**
     * 分页查询假日设置信息。
     *
     * @param groupId                       考勤组ID
     * @param name                          节假日名称（用于搜索过滤）
     * @param paidSalaryEnable              是否计入薪酬标识（用于搜索过滤）
     * @param page                          页码
     * @param size                          每页大小
     * @return                              分页的假日设置视图对象
     */
    PageDTO<AttendanceHolidaySettingVo> page(String groupId, String name, Integer paidSalaryEnable, Integer page, Integer size);

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

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

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

    /**
     * 为指定租户自动授予假期余额。
     *
     * @param tenantId                      租户ID
     */
//    void autoGrantBalance(String tenantId);

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

    /**
     * 保存假日设置信息。
     *
     * @param dto                           假日设置数据传输对象
     */
    void save(AttendanceHolidaySettingDto dto);

    /**
     * 更改假日设置信息的启用状态。
     *
     * @param id                            假日设置ID
     * @param enable                        启用状态（0禁用，1启用）
     */
    void changeStatus(String id, Integer enable);

}
