package cn.iocoder.yudao.module.system.service.attendance;

import cn.iocoder.yudao.module.system.controller.app.attendance.dto.AttendancePunchDTO;
import cn.iocoder.yudao.module.system.controller.app.attendance.dto.AttendancePunchPageDTO;
import cn.iocoder.yudao.module.system.controller.app.attendance.dto.AttendanceStatisticsDTO;
import cn.iocoder.yudao.module.system.controller.app.attendance.vo.AttendancePunchPageVO;
import cn.iocoder.yudao.module.system.controller.app.attendance.vo.AttendancePunchVO;
import cn.iocoder.yudao.module.system.controller.app.attendance.vo.AttendanceStatisticsVO;

import java.time.LocalDateTime;

/**
 * 考勤 Service 接口
 *
 * @author 艾楷
 */
public interface AttendanceService {

    /**
     * 获取打卡页面
     *
     * @param attendancePunchPageDTO
     * @return
     */
    AttendancePunchPageVO getPunchPage(AttendancePunchPageDTO attendancePunchPageDTO);

    /**
     * 判断当前传如时间是否是 节假日(节假日分 补班/放假) 补班的话返回false 放假的话返回 true
     * 如果不是节假日的话返回null
     *
     * @param localDateTime
     * @return
     */
    Boolean isHoliday(LocalDateTime localDateTime);

    /**
     * 计算考勤信息
     *
     * @param vo
     * @param dto
     */
    void calculatePunch(AttendancePunchPageDTO dto, AttendancePunchPageVO vo);

    /**
     * 打卡
     *
     * @param attendancePunchDTO
     * @return
     */
    AttendancePunchVO punch(AttendancePunchDTO attendancePunchDTO);

    /**
     * 考勤统计
     *
     * @param dto
     * @return
     */
    AttendanceStatisticsVO statistics(AttendanceStatisticsDTO dto);
}