package jnpf.attendance.service;

import com.github.pagehelper.PageInfo;
import jnpf.base.ActionResult;
import jnpf.base.service.SuperService;
import jnpf.entity.attendance.AttendanceShiftNameEntity;
import jnpf.exception.HandleException;
import jnpf.model.attendance.dto.FixedClassGroupDto;
import jnpf.model.attendance.dto.ShiftNameDto;
import jnpf.model.attendance.dto.ShiftNameQueryDto;
import jnpf.model.attendance.vo.AttendanceShiftSettingPeriodVo;
import jnpf.model.attendance.vo.SecondmentDateVo;
import jnpf.model.attendance.vo.attendance.FixedClassShiftVo;
import jnpf.model.attendance.vo.attendance.ShiftNameListVo;
import jnpf.model.attendance.vo.attendance.ShiftNameVo;

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

/**
 * @Author huanglinpan
 * @Date 2024/5/9 10:06
 * @Version 1.0 （版本号）
 */
public interface AttendanceShiftNameSettingService extends SuperService<AttendanceShiftNameEntity> {
    /**
     * 新增/修改班次名称
     * @param dto 班次名称信息
     */
    ActionResult save(ShiftNameDto dto);

    Boolean fixedPeriodSingleConflict(Date date, List<SecondmentDateVo> list, AttendanceShiftSettingPeriodVo period);

    /**
     * 起停班次
     * @param shiftNameId 班次名称Id
     * @param enable 状态（1启用 2停用）
     * @param updateShift 是否修改之前班次（1 ： 保持之前班次 2：修改之前的班次）
     */
    ActionResult changeStatus(String shiftNameId, Integer enable, Integer updateShift);

    /**
     * 删除班次
     * @param shiftNameId 班次Id
     * @return 删除结果
     */
    ActionResult delete(String shiftNameId);

    /**
     * 获取班次详情
     * @param shiftNameId 班次Id
     * @return 详情
     */
    ShiftNameVo getDetail(String shiftNameId);

    /**
     * 获取班次详情
     * @param shiftIds 班次时段Id
     * @return 详情
     */
    Map<String, ShiftNameVo> getDetailList(List<String> shiftIds);

    /**
     * 获取固定排班班次详情
     * @param groupId 考勤组
     */
    List<FixedClassShiftVo> getFixedClass(String groupId);

    /**
     * 编辑考勤组固定排班
     * @param dto 固定排班对象
     */
    ActionResult saveOrUpdateFixedClass(FixedClassGroupDto dto);

    /**
     * 考勤组班次列表
     * @param queryDto 考勤组查询信息
     * @return 列表
     */
    PageInfo<ShiftNameListVo> getList(ShiftNameQueryDto queryDto) throws HandleException;
}
