package com.sundot.airport.exam.dto;

import lombok.Data;

import java.math.BigDecimal;
import java.util.List;

/**
 * <b>功能名：</b>GlobalStatisticsDTO<br>
 * <b>说明：</b> 全局统计数据DTO（管理员视角）<br>
 * <b>著作权：</b> Copyright (C) 2025 SUNDOT CORPORATION<br>
 * <b>修改履历：
 *
 * @author 2025-10-18
 */
@Data
public class GlobalStatisticsDTO {

    /**
     * 总用户数（有任务的用户）
     */
    private Integer totalUsers;

    /**
     * 总任务数
     */
    private Integer totalTasks;

    /**
     * 已完成任务数
     */
    private Integer completedTasks;

    /**
     * 待完成任务数（包含PENDING和IN_PROGRESS）
     */
    private Integer pendingTasks;

    /**
     * 已逾期任务数
     */
    private Integer expiredTasks;

    /**
     * 任务完成率
     */
    private BigDecimal taskCompletionRate;

    /**
     * 总答题数
     */
    private Integer totalQuestions;

    /**
     * 正确题数
     */
    private Integer correctQuestions;

    /**
     * 总体正确率
     */
    private BigDecimal overallCorrectRate;

    /**
     * 全局平均分
     */
    private BigDecimal averageScore;

    /**
     * 最高分
     */
    private BigDecimal highestScore;

    /**
     * 最低分
     */
    private BigDecimal lowestScore;

    /**
     * 按状态统计
     */
    private StatusStatistics statusStatistics;

    /**
     * 按部门统计（Top 10）
     */
    private List<DeptStatistics> topDepts;

    /**
     * 按角色统计
     */
    private List<RoleStatistics> roleStatistics;

    /**
     * 全局模块统计
     */
    private List<ModuleStatistics> moduleStatistics;

    /**
     * 状态统计
     */
    @Data
    public static class StatusStatistics {
        private Integer pendingCount;
        private Integer inProgressCount;
        private Integer completedCount;
        private Integer expiredCount;
        private BigDecimal pendingRate;
        private BigDecimal inProgressRate;
        private BigDecimal completedRate;
        private BigDecimal expiredRate;
    }

    /**
     * 部门统计
     */
    @Data
    public static class DeptStatistics {
        private Long deptId;
        private String deptName;
        private Integer totalTasks;
        private Integer completedTasks;
        private BigDecimal completionRate;
        private BigDecimal averageScore;
    }

    /**
     * 角色统计
     */
    @Data
    public static class RoleStatistics {
        private String roleName;
        private Integer totalTasks;
        private Integer completedTasks;
        private BigDecimal completionRate;
        private BigDecimal averageScore;
    }

    /**
     * 模块统计
     */
    @Data
    public static class ModuleStatistics {
        private String moduleId;
        private String moduleName;
        private Integer totalCount;
        private Integer correctCount;
        private BigDecimal correctRate;
    }
}
