package jtznyj.engineer.service;

import com.alibaba.druid.proxy.jdbc.NClobProxyImpl;
import com.alibaba.fastjson.JSON;
import jtznyj.engineer.common.FileUtil;
import jtznyj.engineer.service.dataDiagnosticService.data.MonitorAlarmRanges;
import jtznyj.engineer.service.winform.data.MonitorAlarmRecords;

import java.sql.SQLException;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 单井数据诊断服务
 */
public interface IWellDataDiagnosticService {
    /**
     * 检测井规定时间区间内是否报警
     * @param jh    井号
     * @param startTime 开始时间
     * @param durationInMinute  检测数据样本持续时长（分钟）
     * @param testAllData   是否检测所有样本数据
     * @return
     */
    public Map<String, MonitorAlarmRanges> test(String jh, Date startTime, int durationInMinute, boolean testAllData);
    /**
     * 检测井规定时间区间内是否报警,并保存至AFocusWarn表
     * @param jh    井号
     * @param startTime 开始时间
     * @param durationInMinute  检测数据样本持续时长（分钟）
     * @param testAllData   是否检测所有样本数据
     * @return
     */
    public void testAndSave(String jh, Date startTime, int durationInMinute, boolean testAllData);

    /**
     * 将NClob值转为字符串
     * @param src
     * @return
     */
    static String getNClob(Object src) {
        String result = "";
        if (src instanceof NClobProxyImpl) {
            try {
                result = ((NClobProxyImpl) src).getSubString(1, (int) ((NClobProxyImpl) src).length());
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return result;
    }
    static String GetNClobWithColorChange(Object src) {
        String result = "";
        if (src instanceof NClobProxyImpl) {
            try {
                result = ((NClobProxyImpl) src).getSubString(1, (int) ((NClobProxyImpl) src).length());
                Map mapTypes = JSON.parseObject(result);
                Map FileMap = JSON.parseObject(FileUtil.read());
                List<Map<String, Object>> typeList = (List<Map<String, Object>>) mapTypes.get("AlarmTypeList");
                if (FileMap != null) {
                    for (Map<String, Object> type : typeList) {
                        if (FileMap.get(type.get("name")) == null) {
                            type.put("curveColor", "#e2534d");
                        } else {
                            type.put("curveColor", FileMap.get(type.get("name")));
                        }
                    }
                }

                mapTypes.put("AlarmTypeList", typeList);

                net.sf.json.JSONObject jsonObject = net.sf.json.JSONObject.fromObject(mapTypes);
                result = jsonObject.toString();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return result;
    }

    /**
     * 计算 从endTime-30分钟到endTime之间工程预警的结果
     * @param jh
     * @param endTime
     * @return
     */
    @Deprecated
    MonitorAlarmRecords get30MinutesWarnResults(String jh, Date endTime);
}
