package com.huatek.busi.common;

import java.util.Objects;

import com.huatek.busi.dto.SimulateResultDto;
import com.huatek.busi.entity.*;

import com.huatek.busi.vo.warning.BusiEqmWarningTaskVo;
import lombok.Getter;

/**
 * 监测类型编码
 *
 * @author anker cheng
 * @Date 2019年6月24日
 */
public enum CacMonitorTypeCode {

    WarningEqpmec("变压器", BusiEqmWarningTaskVo.class),
    SimulationGismec("GISmec2", SimulateResult.class),
    SimulationAssess("assess2", SimulateResult.class),
    SimulationSwitch("GISPD2", SimulateResult.class),
    SimulationGenerator("switch3", SimulateResult.class),
    SimulationCable("Generator6", SimulateResult.class),
    SimulationGISPD("Cable7", SimulateResult.class),
    /**
     * 变压器/电抗器——局部放电
     */
    TRANSFORMER_PD("021001", TransformerPd.class),
    /**
     * 变压器/电抗器——油中溶解气体
     */
    TRANSFORMER_OIL_GAS("021002", TransformerEpaData.class),
    /**
     * 变压器/电抗器——微水
     */
    TRANSFORMER_TINY_WATER("021003", TransformerMicro.class), // 暂无
    /**
     * 变压器/电抗器——铁芯接地电流
     */
    TRANSFORMER_ICGE("021004", TransformerIcge.class),
    /**
     * 变压器/电抗器——顶层油温
     */
    TRANSFORMER_TOT("021005", TransformerTot.class), // 80%
    /**
     * 变压器/电抗器——红外测温
     */
    TRANSFORMER_InfraredTemperature("021010", TransformerInfraredTemperature.class),
    /**
     * 变压器/电抗器——绕组测温
     */
    TRANSFORMER_WindingTemperature("021012", TransformerWindingTemperature.class),
    /**
     * 变压器/电抗器——气象
     */
    TRANSFORMER_MIC("021011", TransformerMeteorological.class),
    // 20230404 新增
    /**
     * 变压器/电抗器——测温装置
     */
    TRANSFORMER_CW("021013", CwzzTemperature.class),

    /**
     * 电容型设备——绝缘监测
     */
    CAPACITIVE_EQUIPMENT_IM("022001", CapacitanceEquipmentIm.class),
    /**
     * 电容型设备——红外测温
     */
    CAPACITIVE_EQUIPMENT_InfraredTemperature("022002", TransformerInfraredTemperature.class),

    /**
     * 金属氧化物避雷器——绝缘监测
     */
    LIGHTNINGROD_IM("023001", LightningrodIm.class),
    /**
     * 金属氧化物避雷器——红外测温
     */
    LIGHTNINGROD_InfraredTemperature("023002", TransformerInfraredTemperature.class),
    /**
     * 金属氧化物避雷器——气象
     */
    LIGHTNINGROD_MIC("023003", TransformerMeteorological.class),

    /**
     * 断路器/GIS——局部放电
     */
    GIS_PD("024001", TransformerPd.class),
    /**
     * 断路器/GIS——分合闸线圈电流波形
     */
    GIS_RcWaveform("024002", GisRcWaveform.class),
    /**
     * 断路器/GIS——负荷电流波形
     */
    GIS_LoacurrentdWaveform("024003", GisLoacurrentdWaveform.class),
    /**
     * 断路器/GIS——SF6气体压力
     */
    GIS_SF6Pressure("024004", GisSf6Pressure.class),
    /**
     * 断路器/GIS——SF6气体水分
     */
    GIS_SF6Moisture("024005", GisSf6Pressure.class),
    /**
     * 断路器/GIS——储能电机工作状态
     */
    GIS_EmStatus("024006", GisEmStatus.class),
    /**
     * GIS——SF6环境监测
     */
    GIS_SF6ENV("024009", GisSf6Env.class),
    /**
     * 断路器/GIS——红外测温
     */
    GIS_InfraredTemperature("024007", TransformerInfraredTemperature.class),
    /**
     * 断路器/GIS——气象
     */
    GIS_METEOROLOGICAL("024008", TransformerMeteorological.class),

    /**
     * 综合——变电站微气象
     */
    SubstationMic("025001", TransformerMeteorological.class),

    /**
     * 测温柜——测温柜
     */
    CWG("026002", CwgTemperature.class),

    /**
     * 其他——局部放电
     */
    ELE_PD("027001", TransformerPd.class),

    /**
     * 其他-电缆环流
     */
    OTHER_DLHL("027002", BusiCableCirculation.class),

    /**
     * 电缆-电缆局放
     */
    DL_PD("028001", TransformerPd.class),

    /**
     * 电缆-电缆环流
     */
    DL_DLHL("028002", IBusiCable.class),

    /**
     * todo 电缆-电缆沟
     */
    DL_DLG("028003", IBusiCableDlg.class),

    /**
     * 电缆-红外监测
     */
    DL_InfraredTemperature("028004", TransformerInfraredTemperature.class),
    /* 电缆-测温装置 028006*/
    DL_CW("028006", CwzzTemperature.class),

    GEN_ZD("029001", BusiGeneratorAmpl.class),

    GEN_JF("029002", BusiGeneratorPd.class),

    GEN_YL("029003", BusiGeneratorPressure.class),
    ;

    /**
     * 监测类型编码，监测类型的唯一标识
     */
    @Getter
    private final String code;
    /**
     * 监测专业，例：输 电/变电； 2 位数字码
     */
    @Getter
    private final String monitorType;
    /**
     * 数据分类，1位数字码；例：1～4 分别表示变压器/电抗器、电容型设备、金属 氧化物避雷器、断路器/GIS 监测类型
     */
    @Getter
    private final String dataType;

    @Getter
    private final Class<?> tableClass;

    private CacMonitorTypeCode(String code, Class<?> tableClass) {
        this.code = code;
        this.monitorType = code.substring(0, 2);
        this.dataType = code.substring(2, 3);
        this.tableClass = tableClass;
    }

    public static CacMonitorTypeCode from(String code) {
        for (CacMonitorTypeCode cacMonitorTypeCode : CacMonitorTypeCode.values()) {
            if (Objects.equals(code, cacMonitorTypeCode.code)) {
                return cacMonitorTypeCode;
            }
        }
        throw new RuntimeException("监测编码未定义：" + code);
    }

    public boolean isThis(String code) {
        return this.code.equals(code);
    }
}
