package jnpf.attendance.service;

import com.github.pagehelper.PageInfo;

import jnpf.model.attendance.dto.AttendancePublicHolidayRulesDto;
import jnpf.model.attendance.vo.attendance.AttendancePublicHolidayBalance;
import jnpf.model.attendance.vo.attendance.AttendancePublicHolidayRulesVo;
import jnpf.model.common.PageDto;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * @author panpan
 */
public interface PublicHolidayRulesService {

    /**
     * 公休管理列表
     * @param iText 规则名称模糊查询 非必传
     * @return
     */
    PageInfo<AttendancePublicHolidayRulesVo> list(String iText, PageDto pageDto);

    /**
     * 新增公休管理
     * @param publicHolidayRulesDto 公休管理
     */
    void add(AttendancePublicHolidayRulesDto publicHolidayRulesDto) throws Exception;

    /**
     * 修改公休管理
     * @param publicHolidayRulesDto 公休管理
     */
    void update(AttendancePublicHolidayRulesDto publicHolidayRulesDto) throws Exception;

    /**
     * 删除公休管理
     * @param id 公休管理Id
     */
    AttendancePublicHolidayRulesVo selectOne(String id);

    /**
     * 删除公休管理
     * @param id 公休管理Id
     */
    void delete(@Param("id") String id);

    /**
     * 修改公休管理状态
     * @param publicHolidayRulesDto 公休管理
     */
    void updateState(AttendancePublicHolidayRulesDto publicHolidayRulesDto);

    /**
     * 公休余额查询 固定班不会触发
     * @param yearMonth 年月格式yyyy-MM
     * @param userIds 用户ID列表
     * @return 公休余额列表
     */
    List<AttendancePublicHolidayBalance> getBalanceList(String yearMonth,List<String> userIds) ;

    /**
     * 处理公休(封账时调用) 固定班不会触发
     *
     * @param yearMonth 年月格式yyyy-MM
     * @param userIds   用户ID列表
     * @param ratioMap  用户出勤换算比
     */
    void processPublicHoliday(String yearMonth, List<String> userIds, Map<String, BigDecimal> ratioMap);


    /**
     * 处理公休(解封时调用)
     * @param yearMonth 年月格式yyyy-MM
     * @param userIds 用户ID列表
     */
    void rollbackPublicHoliday(String yearMonth,List<String> userIds);


}
