package com.sundot.airport.item.domain.dto;

import com.sundot.airport.system.domain.SysPost;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

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

/**
 * 资质等级统计DTO
 *
 * @author wangxx
 */
@ApiModel("资质等级统计DTO")
@Data
public class QualificationLevelStatsDTO implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 饼状图数据 - 全站范围内五个资质等级的人数占比分布
     */
    @ApiModelProperty("饼状图数据 - 全站资质等级分布")
    private PieChartData pieChart;

    /**
     * 柱状图数据 - 各大队下五个资质等级的实际人数分布
     */
    @ApiModelProperty("柱状图数据 - 各大队资质等级分布")
    private BarChartData barChart;

    /**
     * 趋势分析数据 - 支持年、季、月维度的时间趋势分析
     */
    @ApiModelProperty("趋势分析数据")
    private TrendAnalysisData trendAnalysis;

    /**
     * 饼状图数据类
     */
    @ApiModel("饼状图数据")
    @Data
    public static class PieChartData implements Serializable {
        private static final long serialVersionUID = 1L;

        /**
         * 数据项列表
         */
        @ApiModelProperty("资质等级分布数据")
        private List<LevelDistribution> data;

        /**
         * 总人数
         */
        @ApiModelProperty("总人数")
        private Integer totalPersons;
    }

    /**
     * 柱状图数据类
     */
    @ApiModel("柱状图数据")
    @Data
    public static class BarChartData implements Serializable {
        private static final long serialVersionUID = 1L;

        /**
         * 大队列表
         */
        @ApiModelProperty("大队数据列表")
        private List<BrigadeData> brigades;
    }

    /**
     * 资质等级分布数据项
     */
    @ApiModel("资质等级分布数据项")
    @Data
    public static class LevelDistribution implements Serializable {
        private static final long serialVersionUID = 1L;

        /**
         * 资质等级名称
         */
        @ApiModelProperty("资质等级")
        private String levelName;

        /**
         * 人数
         */
        @ApiModelProperty("人数")
        private Integer count;

        /**
         * 占比
         */
        @ApiModelProperty("占比(%)")
        private BigDecimal percentage;
    }

    /**
     * 大队数据
     */
    @ApiModel("大队数据")
    @Data
    public static class BrigadeData implements Serializable {
        private static final long serialVersionUID = 1L;

        /**
         * 大队ID/用户ID
         */
        @ApiModelProperty("大队ID/用户ID")
        private Long deptId;

        /**
         * 大队名称/用户姓名
         */
        @ApiModelProperty("大队名称/用户姓名")
        private String deptName;

        /**
         * 资质等级（个人查询时返回）
         */
        @ApiModelProperty("资质等级")
        private String qualificationLevel;

        /**
         * 各等级人数数据（部门统计时返回）
         */
        @ApiModelProperty("各等级人数数据")
        private List<LevelCount> levelCounts;

        /**
         * 可上岗岗位
         */
        @ApiModelProperty("可上岗岗位")
        private List<SysPost> sysPostList;
    }

    /**
     * 等级人数数据
     */
    @ApiModel("等级人数数据")
    @Data
    public static class LevelCount implements Serializable {
        private static final long serialVersionUID = 1L;

        /**
         * 资质等级名称
         */
        @ApiModelProperty("资质等级")
        private String levelName;

        /**
         * 人数
         */
        @ApiModelProperty("人数")
        private Integer count;
    }

    /**
     * 趋势分析数据类
     */
    @ApiModel("趋势分析数据")
    @Data
    public static class TrendAnalysisData implements Serializable {
        private static final long serialVersionUID = 1L;

        /**
         * 时间维度标识（年/季/月）
         */
        @ApiModelProperty("时间维度标识")
        private String timeDimension;

        /**
         * 时间点列表
         */
        @ApiModelProperty("时间点列表")
        private List<String> timePoints;

        /**
         * 各等级趋势数据
         */
        @ApiModelProperty("各等级趋势数据")
        private List<LevelTrendData> levelTrends;

        /**
         * 总人数趋势数据
         */
        @ApiModelProperty("总人数趋势数据")
        private List<Integer> totalPersonsTrend;
    }

    /**
     * 等级趋势数据
     */
    @ApiModel("等级趋势数据")
    @Data
    public static class LevelTrendData implements Serializable {
        private static final long serialVersionUID = 1L;

        /**
         * 资质等级名称
         */
        @ApiModelProperty("资质等级")
        private String levelName;

        /**
         * 人数趋势数据
         */
        @ApiModelProperty("人数趋势数据")
        private List<Integer> countTrend;

        /**
         * 占比趋势数据
         */
        @ApiModelProperty("占比趋势数据(%)")
        private List<BigDecimal> percentageTrend;
    }
}