package com.sundot.airport.item.mapper;

import com.sundot.airport.item.domain.dto.ChannelRankingStatsDTO;
import com.sundot.airport.item.domain.dto.ItemCategoryStatsDTO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

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

/**
 * 查获物品分类统计Mapper接口
 */
@Mapper
public interface ItemCategoryStatsMapper {

    /**
     * 按一级分类统计全站查获数据
     *
     * @param stationId    站点ID
     * @param startTime    开始时间
     * @param endTime      结束时间
     * @param brigadeId    大队 ID（可选）
     * @param departmentId 科室 ID（可选）
     * @param teamId       班 ID（可选）
     * @param userId       人员 ID（可选）
     * @return 分类统计数据列表
     */
    List<ItemCategoryStatsDTO.CategoryStat> selectStationCategoryStats(
            @Param("stationId") Long stationId,
            @Param("startTime") Date startTime,
            @Param("endTime") Date endTime,
            @Param("brigadeId") Long brigadeId,
            @Param("departmentId") Long departmentId,
            @Param("teamId") Long teamId,
            @Param("userId") Long userId);

    /**
     * 统计全站查获总量
     *
     * @param stationId    站点ID
     * @param startTime    开始时间
     * @param endTime      结束时间
     * @param brigadeId    大队 ID（可选）
     * @param departmentId 科室 ID（可选）
     * @param teamId       班 ID（可选）
     * @param userId       人员 ID（可选）
     * @return 总查获数量
     */
    Long selectStationTotalQuantity(
            @Param("stationId") Long stationId,
            @Param("startTime") Date startTime,
            @Param("endTime") Date endTime,
            @Param("brigadeId") Long brigadeId,
            @Param("departmentId") Long departmentId,
            @Param("teamId") Long teamId,
            @Param("userId") Long userId);

    /**
     * 按部位统计隐匿夹带查获数据
     *
     * @param stationId    站点ID
     * @param startTime    开始时间
     * @param endTime      结束时间
     * @param brigadeId    大队 ID（可选）
     * @param departmentId 科室 ID（可选）
     * @param teamId       班 ID（可选）
     * @param userId       人员 ID（可选）
     * @return 部位统计数据列表
     */
    List<ItemCategoryStatsDTO.CategoryStat> selectStationConcealmentPositionStats(
            @Param("stationId") Long stationId,
            @Param("startTime") Date startTime,
            @Param("endTime") Date endTime,
            @Param("brigadeId") Long brigadeId,
            @Param("departmentId") Long departmentId,
            @Param("teamId") Long teamId,
            @Param("userId") Long userId);

    /**
     * 统计全站隐匿夹带查获总量
     *
     * @param stationId    站点ID
     * @param startTime    开始时间
     * @param endTime      结束时间
     * @param brigadeId    大队 ID（可选）
     * @param departmentId 科室 ID（可选）
     * @param teamId       班 ID（可选）
     * @param userId       人员 ID（可选）
     * @return 隐匿夹带总查获数量
     */
    Long selectStationConcealmentTotalQuantity(
            @Param("stationId") Long stationId,
            @Param("startTime") Date startTime,
            @Param("endTime") Date endTime,
            @Param("brigadeId") Long brigadeId,
            @Param("departmentId") Long departmentId,
            @Param("teamId") Long teamId,
            @Param("userId") Long userId);

    /**
     * 按岗位第二级分类统计查获数据
     *
     * @param stationId    站点ID
     * @param startTime    开始时间
     * @param endTime      结束时间
     * @param brigadeId    大队 ID（可选）
     * @param departmentId 科室 ID（可选）
     * @param teamId       班 ID（可选）
     * @param userId       人员 ID（可选）
     * @return 岗位分类统计数据列表
     */
    List<ItemCategoryStatsDTO.CategoryStat> selectStationPostCategoryStats(
            @Param("stationId") Long stationId,
            @Param("startTime") Date startTime,
            @Param("endTime") Date endTime,
            @Param("brigadeId") Long brigadeId,
            @Param("departmentId") Long departmentId,
            @Param("teamId") Long teamId,
            @Param("userId") Long userId);

    /**
     * 统计全站岗位分类查获总量
     *
     * @param stationId    站点ID
     * @param startTime    开始时间
     * @param endTime      结束时间
     * @param brigadeId    大队 ID（可选）
     * @param departmentId 科室 ID（可选）
     * @param teamId       班 ID（可选）
     * @param userId       人员 ID（可选）
     * @return 岗位分类总查获数量
     */
    Long selectStationPostCategoryTotalQuantity(
            @Param("stationId") Long stationId,
            @Param("startTime") Date startTime,
            @Param("endTime") Date endTime,
            @Param("brigadeId") Long brigadeId,
            @Param("departmentId") Long departmentId,
            @Param("teamId") Long teamId,
            @Param("userId") Long userId);

    /**
     * 查询全站通道排名前五数据
     *
     * @param stationId    站点ID
     * @param startTime    开始时间
     * @param endTime      结束时间
     * @param brigadeId    大队 ID（可选）
     * @param departmentId 科室 ID（可选）
     * @param teamId       班 ID（可选）
     * @param userId       人员 ID（可选）
     * @return 通道排名数据列表（前五名）
     */
    List<ChannelRankingStatsDTO.ChannelRankingItem> selectTopFiveChannelRankings(
            @Param("stationId") Long stationId,
            @Param("startTime") Date startTime,
            @Param("endTime") Date endTime,
            @Param("brigadeId") Long brigadeId,
            @Param("departmentId") Long departmentId,
            @Param("teamId") Long teamId,
            @Param("userId") Long userId);


}