package cn.cecep.talroad.vo;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

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

@ApiModel(value = "echarts图表数据返回实体")
@Data
public class EChartsVO {

    @ApiModelProperty("legend数据")
    private List<String> legendData;

    @ApiModelProperty("x轴数据")
    private List<String> xData;

    @ApiModelProperty("系列数据")
    private List<SeriesObj> series;

    @ApiModelProperty("危废系列数据")
    private List<MaterialsSeriesObj> materialsSeries;

    @ApiModelProperty("图表名称")
    private String name;

    @ApiModelProperty("渲染标识 1:状态随时间变化")
    private String renderFlag;

    @ApiModel
    @Data
    public static class MaterialsSeriesObj {
        @ApiModelProperty("固危废名称")
        private String name;

        @ApiModelProperty("单位")
        private String unit;

        @ApiModelProperty("危废数据")
        private List<SeriesObj> series;
    }

    @ApiModel
    @Data
    public static class SeriesObj {
        @ApiModelProperty("系列名称")
        private String name;

        @ApiModelProperty("取值属性名")
        private String prop;

        @ApiModelProperty("单位")
        private String unit;

        @ApiModelProperty("额外的属性，可根据不同使用场景设置")
        private String other;

        @ApiModelProperty("系列值")
        private List<Object> values;

        @ApiModelProperty("危废系列值")
        private List<Object> value;

        @ApiModelProperty("标记线")
        private MarkLine markLine;

        @ApiModelProperty("标记线")
        private MarkArea markArea;

        @ApiModelProperty("系列类型 上限:upperLimit, 下限:lowerLimit, 问题参数:problem")
        private String seriesType;
    }

    @ApiModel
    @Data
    public static class MarkLine {
        @ApiModelProperty("标记线数据，格式具体见echarts文档")
        private List<Object> data;

        public MarkLine() {
        }

        public MarkLine(List<Object> data) {
            this.data = data;
        }
    }

    @ApiModel
    @Data
    public static class MarkArea {
        @ApiModelProperty("标记区域数据，格式具体见echarts文档")
        private List<Object> data;

        public MarkArea() {
        }

        public MarkArea(List<Object> data) {
            this.data = data;
        }
    }

    @ApiModel(value = "echarts 旭日图（sunburst）数据结构")
    @Data
    public static class Sunburst {
        private String name;
        private Long value;
        private List<Sunburst> children;

        // 以下属性不是echarts要求的，用于构建树使用
        private String id;
        private String parentId;
    }

    @ApiModel(value = "echarts 箱型图（diagram）数据结构")
    @Data
    public static class DiagramVo {

        private BigDecimal avgValue;

        private List<Diagram> diagrams;
    }

    @ApiModel(value = "echarts 箱型图（diagram）数据结构")
    @Data
    public static class Diagram {

        private String name;
        /**
         * 最小值--正常运行低限
         */
        private Double minValue;

        /**
         * 最大值--正常运行高限
         */
        private Double maxValue;

        /**
         * Q1(下四分位)值 用于异常值判断
         */
        private Double q1Value;

        /**
         * Q2(上四分位)值 用于异常值判断
         */
        private Double q2Value;

        /**
         * 平均值
         */
        private Double avgValue;

    }

}
