package jnpf.attendance.service;

import jnpf.exception.QueryException;
import jnpf.model.attendance.dto.*;
import jnpf.model.attendance.model.ClockUser;
import jnpf.model.attendance.vo.*;
import jnpf.model.attendance.vo.attendance.ClockInExportVo;
import jnpf.model.common.DateRangeDto;

import java.text.ParseException;
import java.util.List;

/**
 * 统计服务
 *
 * @author shitou
 * @date 2023/11/21
 */
public interface AppStatisticsService {
    /**
     * 获取我的考勤-主页
     *
     * @param req 筛选条件
     * @return AppStatisticsListVo
     */
    AppStatisticsListVo getAppHomeData(AppStatisticsListDto req) throws QueryException;

    /**
     * 获取我的考勤-出勤情况
     *
     * @param req 筛选条件
     * @return List<AppStatisticsRecordVo>
     */
    List<AppStatisticsRecordVo> getRecordData(AppStatisticsRecordDto req) throws Exception;

    /**
     * 获取我的考勤-更多统计-默认
     *
     * @param req 筛选条件
     * @return AppStatisticsMoreVo
     */
    AppStatisticsMoreVo getMoreDefaultData(AppStatisticsMoreDto req) throws Exception;

    /**
     * 获取我的考勤-更多统计-展开
     *
     * @param req 筛选条件
     * @return AppStatisticsMoreInfoVo
     */
    AppStatisticsMoreInfoVo getMoreExpandData(AppStatisticsMoreInfoDto req) throws Exception;

    /**
     * 获取团队考勤-首页
     *
     * @param req 筛选条件
     * @return AppStatisticsTeamListVo
     */
    AppStatisticsTeamListVo getTeamHomeData(AppStatisticsTeamListDto req) throws QueryException;

    /**
     * 获取团队考勤-tab列表数据
     *
     * @param req 筛选条件
     * @return List<AppStatisticsTeamTabVo>
     */
    List<AppStatisticsTeamTabVo> getTabListData(AppTeamStatisticsTabDto req);

    /**
     * 获取团队考勤-团队统计
     *
     * @param req 筛选条件
     * @return AppTeamStatisticsVo
     */
    AppTeamStatisticsVo getStatisticsData(AppTeamStatisticsDto req) throws ParseException;

    /**
     * 获取团队考勤-团队统计-详情列表
     *
     * @param req 筛选条件
     * @return List<AppTeamStatisticsListVo>
     */
    List<AppTeamStatisticsListVo> getStatisticsListData(AppTeamStatisticsListDto req) throws ParseException, QueryException;

    /**
     * 考勤组指定日期考勤打卡及时段
     * @param usersByGroupVos 用户id集合
     * @param tenantId 租户id
     * @param dateRangeDto 日期范围
     */
    List<ClockInExportVo> getDayClockInPageListExport(List<ClockInExportVo> usersByGroupVos, DateRangeDto dateRangeDto,String tenantId);
}
