package com.sundot.airport.exam.dto;

import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;

/**
 * <b>功能名：</b>AccuracyStatisticsDTO<br>
 * <b>说明：</b> 正确率统计结果DTO（匹配成都接口格式） <br>
 * <b>著作权：</b> Copyright (C) 2026 SUNDOT CORPORATION<br>
 *
 * @author Simon Lin
 */
@Data
public class AccuracyStatisticsDTO implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 用户角色
     */
    private String userRole;

    /**
     * 时间范围描述
     */
    private String timePeriod;

    /**
     * 是否有待完成任务
     */
    private Boolean hasPendingTask;

    /**
     * 待完成任务ID
     */
    private String pendingTaskId;

    /**
     * 今日任务完成情况
     */
    private String todayTaskCompletion;

    /**
     * 个人正确率（百分比）
     */
    private BigDecimal personalAccuracy;

    /**
     * 个人正确数
     */
    private Long personalCorrectCount;

    /**
     * 个人总答题数
     */
    private Long personalTotalCount;

    /**
     * 班组平均正确率
     */
    private BigDecimal teamAvgAccuracy;

    /**
     * 主管平均正确率（成都为科室deptAvgAccuracy）
     */
    private BigDecimal deptAvgAccuracy;

    /**
     * 大队平均正确率（美兰特有）
     */
    private BigDecimal brigadeAvgAccuracy;

    /**
     * 站级平均正确率
     */
    private BigDecimal siteAvgAccuracy;

    /**
     * 个人在班组中的排名
     */
    private RankingInfo teamRanking;

    /**
     * 个人在主管中的排名（成都为科室deptRanking）
     */
    private RankingInfo deptRanking;

    /**
     * 个人在大队中的排名（美兰特有）
     */
    private RankingInfo brigadeRanking;

    /**
     * 个人在站级中的排名
     */
    private RankingInfo siteRanking;

    /**
     * 班组在主管中的排名
     */
    private RankingInfo teamInDeptRanking;

    /**
     * 班组在大队中的排名
     */
    private RankingInfo teamInBrigadeRanking;

    /**
     * 班组在站级中的排名
     */
    private RankingInfo teamInSiteRanking;

    /**
     * 主管在大队中的排名
     */
    private RankingInfo deptInBrigadeRanking;

    /**
     * 大队在站级中的排名
     */
    private RankingInfo brigadeInSiteRanking;

    /**
     * 主管内Top班组
     */
    private java.util.List<RankingItem> topTeamsInDept;

    /**
     * 主管在站级中的排名
     */
    private RankingInfo deptInSiteRanking;

    /**
     * Top主管（科室）- 正序前三名
     */
    private java.util.List<RankingItem> topDepts;

    /**
     * Bottom主管（科室）- 倒序后三名
     */
    private java.util.List<RankingItem> bottomDepts;

    /**
     * 大队正确率排名列表（站长视角）
     */
    private java.util.List<RankingItem> brigadeRankingList;

    /**
     * 本大队内Top主管（大队长视角）
     */
    private java.util.List<RankingItem> topKezhangInBrigade;

    /**
     * 站级内Top班组
     */
    private java.util.List<RankingItem> topTeamsInSite;

    /**
     * 站级内Bottom班组
     */
    private java.util.List<RankingItem> bottomTeamsInSite;

    /**
     * 排名信息
     */
    @Data
    public static class RankingInfo implements Serializable {
        private static final long serialVersionUID = 1L;

        /**
         * 排名
         */
        private Integer rank;

        /**
         * 总数
         */
        private Integer total;
    }

    /**
     * 排名项
     */
    @Data
    public static class RankingItem implements Serializable {
        private static final long serialVersionUID = 1L;

        /**
         * ID
         */
        private Long id;

        /**
         * 名称
         */
        private String name;

        /**
         * 正确率
         */
        private BigDecimal accuracy;

        /**
         * 排名
         */
        private Integer rank;
    }
}
