package com.ruoyi.oa.service;

import com.ruoyi.oa.domain.CalendarDay;
import com.ruoyi.oa.domain.vo.SysHolidayVo;
import com.ruoyi.oa.domain.vo.SysOaHolidayListVo;
import com.ruoyi.oa.domain.vo.SysOaHolidayVo;
import com.ruoyi.oa.domain.bo.SysOaHolidayBo;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.domain.PageQuery;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.Collection;
import java.util.Date;
import java.util.List;

/**
 * 休假管理Service接口
 *
 * @author liuzongkun999
 * @date 2025-02-20
 */
public interface ISysOaHolidayService {

    /**
     * 查询休假管理
     */
    SysOaHolidayVo queryById(Long holidayId);

    /**
     * 查询休假管理列表
     */
    TableDataInfo<SysOaHolidayVo> queryPageList(SysOaHolidayBo bo, PageQuery pageQuery);

    /**
     * 查询休假管理列表
     */
    List<SysOaHolidayVo> queryList(SysOaHolidayBo bo);

    /**
     * 新增休假管理
     */
    Boolean insertByBo(SysOaHolidayBo bo);

    /**
     * 修改休假管理
     */
    Boolean updateByBo(SysOaHolidayBo bo);

    /**
     * 校验并批量删除休假管理信息
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);

    /**
     * 查询指定日期的休假信息
     */
    SysOaHolidayVo queryHolidayByDate(@NotBlank(message = "日期不能为空") Date date);

    /**
     * 根据节假日类别查询相应的休假
     */
    List<SysOaHolidayListVo> queryHolidayByType(@NotNull(message = "类别不能为空") Integer type);

    /**
     * 查询当前月的所有休假
     */
    List<SysOaHolidayVo> queryHolidayNowMonth();

    /**
     * 更新一段时间的休假状态
     */
    Boolean updateHolidayStatusByDate(Integer type, Date startDate, Date endDate);


    List<SysHolidayVo> queryVoList(SysOaHolidayBo bo);

    /**
     * 查询当月的工作日
     * @param payTime
     * @return
     */
    Long queryWorkDayNumByMonth(Date payTime);

    /**
     * 首页接口
     *
     * @param bo
     * @param pageQuery
     * @return
     */
    List<CalendarDay> queryOwnList(SysOaHolidayBo bo, PageQuery pageQuery);

}
