package com.inspect.analysis.domain;

import com.inspect.base.core.annotation.Excel;
import com.inspect.base.core.utils.StringUtils;
import com.inspect.base.core.web.domain.BaseEntity;
import lombok.Getter;
import lombok.Setter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Date;
import java.util.List;

@Setter
@Getter
public class ResultAnalysis extends BaseEntity {
    private static final long serialVersionUID = 1L;
    private final Logger log = LoggerFactory.getLogger(getClass());

    private Long lineId;
    @Excel(
            name = "0-告警 1-结果"
    )
    private String resultType;
    @Excel(
            name = "关联业务id"
    )
    private String businessId;
    @Excel(
            name = "返回结果 一般为json数据"
    )
    private String resultContent;
    private String resStatus;
    /**
     * 点位状态 0-异常 1-正常 2-待人工确认 3-已撤销（忽略） 4-跟踪（告警） 5-确认（告警） 6-缺陷
     */
    private String pointStatus;
    private List<String> pointStatusList;
    private String beginTime;
    private String endTime;
    private String suggestion;
    private String objectId;
    private String description;
    private String requestId;
    private String areaId;
    private String mainDevId;

    private String resValue;
    private String algType;
    private String filter;
    private String taskPatrolId;
    private String resCode;
    private String resImgUrl;
    private String resConf;
    private String resDesc;
    private String resPos;
    private String result;
    private String algName;
    private String originalValue;
    private String imageNormalUrlPath;
    private String taskPatrolledId;
    private String posType;
    private int csQxNum;
    private int csYcNum;
    private int aiQxNum;
    private int aiYcNum;
    private int qxNum;
    private String pointName;
    private String deviceName;
    private String abnormal;
    private String channelName;
    private String deviceSource;
    private String filterDesc;
    private String desc;
    private List<String> taskPatrolIds;

    public ResultAnalysis(String businessId) {
        this.businessId = businessId;
    }

    public ResultAnalysis() {
    }

//    public boolean checkCode(String code, String desc) {
//        if (AnalyseConstants.ANALYSE_OK.equals(code)) {
//            setCreateTime(new Date());
//            return true;
//        }
//
//        if (AnalyseConstants.ANALYSE_FAIL_NO_FILE.equals(code)
//                || AnalyseConstants.ANALYSE_FAIL_FILE_EXCEPT.equals(code)
//                || AnalyseConstants.ANALYSE_FAIL_FILE_INCOMPATIBLE.equals(code)) {
//            setDescription(desc);
//        } else if (AnalyseConstants.ANALYSE_FAIL_ALG_EXCEPT.equals(code)) {
//            setDescription("算法内部异常");
//        } else {
//            setDescription("未知错误");
//            log.error("[ANALYSE RES] Error Return Code={}", code);
//        }
//
//        setPointStatus("0");
//        setResultType("2");
//        setResStatus("0");
//        setCreateTime(new Date());
//        return false;
//    }

    public static ResultAnalysis createInfrared(String businessId, String deviceId) {
        ResultAnalysis resultAnalysis = new ResultAnalysis();
        resultAnalysis.setBusinessId(businessId);
        resultAnalysis.setResultContent("{\"requestId\": \"123\", \"resultList\": [{\"objectId\": \"" + deviceId + "\", \"results\": [{\"type\": \"infrared\", \"value\": \"0\", \"code\": \"2000\", \"resImageUrl\": \"\", \"pos\": [], \"conf\": 0.8, \"desc\": \"\"}]}]}");
        if (StringUtils.isNotEmpty(deviceId)) {
            resultAnalysis.setObjectId(deviceId);
        }

        resultAnalysis.setDescription("");
        resultAnalysis.setCreateTime(new Date());
        resultAnalysis.setResStatus("1");
        resultAnalysis.setPointStatus("1");
        resultAnalysis.setResultType("1");
        return resultAnalysis;
    }

//    public void parseAlg(String algType, AlgValue algValue, String value, String defaultDesc) {
//        if(value == null) {
//            value = "";
//        }
//
//        value = algValue.formatValue(value);
//        if("1".equals(this.filter)) {
//            algType = "";
//        }
//
//        byte var6 = -1;
//        switch(value.hashCode()) {
//            case 0:
//                if(value.isEmpty()) {
//                    var6 = 0;
//                }
//                break;
//            case 1444:
//                if(value.equals("-1")) {
//                    var6 = 1;
//                }
//        }
//
//        switch(var6) {
//            case 0:
//            case 1:
//                this.setPointStatus("0");
//                this.setResultType("2");
//                this.setResStatus("0");
//                if("meter".equals(algType)) {
//                    defaultDesc = "与样本有差异";
//                } else {
//                    defaultDesc = "算法内部异常";
//                }
//
//                this.setDescription(defaultDesc);
//                this.setCreateTime(new Date());
//                return;
//            default:
//                var6 = -1;
//                switch(algType.hashCode()) {
//                    case -951532658:
//                        if(algType.equals("qrcode")) {
//                            var6 = 2;
//                        }
//                        break;
//                    case -889473228:
//                        if(algType.equals("switch")) {
//                            var6 = 1;
//                        }
//                        break;
//                    case 102970646:
//                        if(algType.equals("light")) {
//                            var6 = 3;
//                        }
//                        break;
//                    case 103787401:
//                        if(algType.equals("meter")) {
//                            var6 = 4;
//                        }
//                        break;
//                    case 109627663:
//                        if(algType.equals("sound")) {
//                            var6 = 6;
//                        }
//                        break;
//                    case 181105857:
//                        if(algType.equals("infrared")) {
//                            var6 = 5;
//                        }
//                        break;
//                    case 575780445:
//                        if(algType.equals("isolator")) {
//                            var6 = 0;
//                        }
//                }
//
//                byte var8;
//                label83:
//                switch(var6) {
//                    case 0:
//                        var8 = -1;
//                        switch(value.hashCode()) {
//                            case 51:
//                                if(value.equals("3")) {
//                                    var8 = 0;
//                                }
//                                break;
//                            case 52:
//                                if(value.equals("4")) {
//                                    var8 = 1;
//                                }
//                        }
//
//                        switch(var8) {
//                            case 0:
//                            case 1:
//                                this.setPointStatus("1");
//                                this.setResultType("1");
//                                this.setResStatus("0");
//                                break label83;
//                            default:
//                                this.setPointStatus("0");
//                                this.setResultType("2");
//                                this.setResStatus("0");
//                                break label83;
//                        }
//                    case 1:
//                    case 2:
//                    case 3:
//                        this.setResStatus("1");
//                        this.setPointStatus("1");
//                        this.setResultType("1");
//                        break;
//                    case 4:
//                        if(!algValue.isAlarm(value)) {
//                            this.setResStatus("0");
//                            this.setPointStatus("1");
//                            this.setResultType("1");
//                            defaultDesc = "正常";
//                        } else {
//                            this.setResStatus("0");
//                            this.setPointStatus("0");
//                            this.setResultType("0");
//                            defaultDesc = "表计超限";
//                        }
//                        break;
//                    case 5:
//                        if(algValue.isAlarm(value)) {
//                            this.setResStatus("1");
//                            this.setPointStatus("1");
//                            this.setResultType("1");
//                            defaultDesc = "正常";
//                        } else {
//                            this.setResStatus("0");
//                            this.setPointStatus("2");
//                            this.setResultType("0");
//                            defaultDesc = "温度告警";
//                        }
//                        break;
//                    case 6:
//                        if(value.equals("1")) {
//                            this.setResStatus("1");
//                            this.setPointStatus("1");
//                            this.setResultType("1");
//                            defaultDesc = "正常";
//                        } else {
//                            this.setResStatus("0");
//                            this.setPointStatus("0");
//                            this.setResultType("0");
//                            defaultDesc = "异常";
//                        }
//                        break;
//                    default:
//                        var8 = -1;
//                        switch(value.hashCode()) {
//                            case 48:
//                                if(value.equals("0")) {
//                                    var8 = 0;
//                                }
//                                break;
//                            case 49:
//                                if(value.equals("1")) {
//                                    var8 = 1;
//                                }
//                        }
//
//                        switch(var8) {
//                            case 0:
//                                this.setPointStatus("1");
//                                this.setResultType("1");
//                                this.setResStatus("2");
//                                defaultDesc = "正常";
//                                this.setResDesc(defaultDesc);
//                                this.setSuggestion("系统审核");
//                                break;
//                            case 1:
//                                this.setPointStatus("0");
//                                this.setResultType("0");
//                                this.setResStatus("0");
//                        }
//                }
//
//                this.setDescription(defaultDesc);
//                this.setCreateTime(new Date());
//        }
//    }

//    public void parseAlg(String algType, AlgValue algValue, String value, String defaultDesc) {
//        log.warn("parseAlg algType: {}, algValue: {}, value: {}, defaultDesc: {}", algType, algValue, value, defaultDesc);
//        if (value == null) {
//            value = "";
//        }
//
//        value = algValue.formatValue(value);
//        if ("1".equals(this.filter)) {
//            algType = "";
//        }
//
//        if(StringUtils.isNull(algType)) {
//            log.warn("parseAlg algType is null!");
//            return;
//        }
//
//        if (value.isEmpty() || value.equals("-1")) {
//            this.setPointStatus("0");
//            this.setResultType("2");
//            this.setResStatus("0");
//            if ("meter".equals(algType)) {
//                defaultDesc = "与样本有差异";
//            } else {
//                defaultDesc = "算法内部异常";
//            }
//
//            this.setDescription(defaultDesc);
//            this.setCreateTime(new Date());
//            return;
//        }
//
//        if (algType.equals("qrcode")) {
//            this.setResStatus("1");
//            this.setPointStatus("1");
//            this.setResultType("1");
//        } else if (algType.equals("switch")) {
//            this.setResStatus("1");
//            this.setPointStatus("1");
//            this.setResultType("1");
//        } else if (algType.equals("light")) {
//            this.setResStatus("1");
//            this.setPointStatus("1");
//            this.setResultType("1");
//        } else if (algType.equals("meter")) {
//            if (!algValue.isAlarm(value)) {
//                this.setResStatus("0");
//                this.setPointStatus("1");
//                this.setResultType("1");
//                defaultDesc = "正常";
//            } else {
//                this.setResStatus("0");
//                this.setPointStatus("0");
//                this.setResultType("0");
//                defaultDesc = "表计超限";
//            }
//        } else if (algType.equals("sound")) {
//            if (value.equals("1")) {
//                this.setResStatus("1");
//                this.setPointStatus("1");
//                this.setResultType("1");
//                defaultDesc = "正常";
//            } else {
//                this.setResStatus("0");
//                this.setPointStatus("0");
//                this.setResultType("0");
//                defaultDesc = "异常";
//            }
//        } else if (algType.equals("infrared") ||
//                algType.equals("infra_1800") ||
//                algType.equals("infra_yu3") ||
//                algType.equals("infra_camera") ||
//                algType.equals("infra_camera_reverse") ||
//                algType.equals("xb")) {
//            String device = "";
//            if(algType.equals("infrared")) {
//                device = "红外";
//            } else if(algType.equals("infra_1800")) {
//                device = "红外1800";
//            } else if(algType.equals("infra_yu3")) {
//                device = "无人机红外";
//            } else if(algType.equals("infra_camera")) {
//                device = "摄像头红外";
//            } else if(algType.equals("infra_camera_reverse")) {
//                device = "摄像头红外灰度反算";
//            } else if(algType.equals("xb")) {
//                device = "形变";
//            }
//
//            if (!algValue.isAlarm(value)) {
//                this.setResStatus("1");
//                this.setPointStatus("1");
//                this.setResultType("1");
//                defaultDesc = device + "正常";
//            } else {
//                this.setResStatus("0");
//                this.setPointStatus("2");
//                this.setResultType("0");
//                defaultDesc = device + "告警";
//            }
//        } else if (algType.equals("isolator")) {
//            if (value.equals("3")) {
//                this.setPointStatus("1");
//                this.setResultType("1");
//                this.setResStatus("0");
//            } else if (value.equals("4")) {
//                this.setPointStatus("1");
//                this.setResultType("1");
//                this.setResStatus("0");
//            } else {
//                this.setPointStatus("0");
//                this.setResultType("2");
//                this.setResStatus("0");
//            }
//        } else {
//            if (value.equals("0")) {
//                this.setPointStatus("1");
//                this.setResultType("1");
//                this.setResStatus("2");
//                defaultDesc = "正常";
//                this.setResDesc(defaultDesc);
//                this.setSuggestion("系统审核");
//            } else if (value.equals("1")) {
//                this.setPointStatus("0");
//                this.setResultType("0");
//                this.setResStatus("0");
//            }
//        }
//        this.setDescription(defaultDesc);
//        this.setCreateTime(new Date());
//    }

    @Override
    public String toString() {
        return "ResultAnalysis{" +
                "lineId=" + lineId +
                ", resultType='" + resultType + '\'' +
                ", businessId='" + businessId + '\'' +
                ", resultContent='" + resultContent + '\'' +
                ", resStatus='" + resStatus + '\'' +
                ", pointStatus='" + pointStatus + '\'' +
                ", pointStatusList='" + pointStatusList + '\'' +
                ", beginTime='" + beginTime + '\'' +
                ", endTime='" + endTime + '\'' +
                ", createTime='" + super.getCreateTime() + '\'' +
                ", suggestion='" + suggestion + '\'' +
                ", objectId='" + objectId + '\'' +
                ", description='" + description + '\'' +
                ", requestId='" + requestId + '\'' +
                ", areaId='" + areaId + '\'' +
                ", mainDevId='" + mainDevId + '\'' +
                ", resValue='" + resValue + '\'' +
                ", algType='" + algType + '\'' +
                ", filter='" + filter + '\'' +
                ", taskPatrolId='" + taskPatrolId + '\'' +
                ", resCode='" + resCode + '\'' +
                ", resImgUrl='" + resImgUrl + '\'' +
                ", resConf='" + resConf + '\'' +
                ", resDesc='" + resDesc + '\'' +
                ", resPos='" + resPos + '\'' +
                ", result='" + result + '\'' +
                ", algName='" + algName + '\'' +
                ", originalValue='" + originalValue + '\'' +
                ", imageNormalUrlPath='" + imageNormalUrlPath + '\'' +
                ", taskPatrolledId='" + taskPatrolledId + '\'' +
                ", posType='" + posType + '\'' +
                ", csQxNum=" + csQxNum +
                ", csYcNum=" + csYcNum +
                ", aiQxNum=" + aiQxNum +
                ", aiYcNum=" + aiYcNum +
                ", pointName='" + pointName + '\'' +
                ", deviceName='" + deviceName + '\'' +
                ", abnormal='" + abnormal + '\'' +
                ", channelName='" + channelName + '\'' +
                ", deviceSource='" + deviceSource + '\'' +
                ", filterDesc='" + filterDesc + '\'' +
                ", desc='" + desc + '\'' +
                '}';
    }
}
