package jnpf.attendance.service;

import jnpf.base.service.SuperService;
import jnpf.entity.attendance.FtbAttendanceLineSchedulingPayrollHours;

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

/**
 * 划线排班计薪工时Service
 *
 * @author jnpf
 * @since 2026-02-27
 */
public interface AttendanceLineSchedulingPayrollHoursService extends SuperService<FtbAttendanceLineSchedulingPayrollHours> {

    /**
     * 根据用户ID、考勤组ID和日期范围查询计薪工时列表
     *
     * @param userId   用户ID
     * @param groupId  考勤组ID
     * @param startDay 开始日期
     * @param endDay   结束日期
     * @return 计薪工时列表
     */
    List<FtbAttendanceLineSchedulingPayrollHours> listByUserIdAndGroupId(String userId, String groupId, Date startDay, Date endDay);

    /**
     * 根据用户ID列表和日期范围查询计薪工时列表
     *
     * @param userIds  用户ID列表
     * @param groupId  考勤组ID
     * @param startDay 开始日期
     * @param endDay   结束日期
     * @return 计薪工时列表
     */
    List<FtbAttendanceLineSchedulingPayrollHours> listByUserIdsAndGroupId(List<String> userIds, String groupId, Date startDay, Date endDay);

    /**
     * 根据日期范围查询计薪工时列表
     *
     * @param groupId  考勤组ID
     * @param startDay 开始日期
     * @param endDay   结束日期
     * @return 计薪工时列表
     */
    List<FtbAttendanceLineSchedulingPayrollHours> listByGroupId(String groupId, Date startDay, Date endDay);

    /**
     * 批量保存或更新划线排班计薪工时
     *
     * @param payrollHoursList 计薪工时列表
     * @return 是否成功
     */
    boolean saveOrUpdateBatch(List<FtbAttendanceLineSchedulingPayrollHours> payrollHoursList);

    /**
     * 根据用户ID、考勤组ID和日期删除计薪工时
     *
     * @param userId  用户ID
     * @param groupId 考勤组ID
     * @param day     日期
     * @return 是否成功
     */
    boolean deleteByUserIdAndGroupId(String userId, String groupId, Date day);

    /**
     * 根据考勤组ID和日期范围删除计薪工时
     *
     * @param groupId  考勤组ID
     * @param startDay 开始日期
     * @param endDay   结束日期
     * @return 是否成功
     */
    boolean deleteByGroupId(String groupId, Date startDay, Date endDay);

    FtbAttendanceLineSchedulingPayrollHours listByUserIdsAndDays(String userId, String groupId, Date day);

    /**
     * 根据用户集合、考勤组ID和时间集合查询计薪工时
     *
     * @param userIds  用户ID集合
     * @param groupId  考勤组ID
     * @param days     日期集合
     * @return 计薪工时列表
     */
    List<FtbAttendanceLineSchedulingPayrollHours> listByUserIdsAndDays(List<String> userIds, String groupId, List<Date> days);

    List<FtbAttendanceLineSchedulingPayrollHours> listByUserIdsAndDays(List<String> userIds, List<String> groupIds, List<Date> days);

    /**
     * 保存划线排班计薪工时集合（先清除后添加）
     *
     * @param payrollHoursList 计薪工时集合
     * @return 是否成功
     */
    boolean savePayrollHoursList(List<FtbAttendanceLineSchedulingPayrollHours> payrollHoursList);
}
