package com.gyee.frame.netty.websocket.config;

import lombok.Data;

import java.io.IOException;
import java.util.HashMap;

/**
 *@author:Wang Jiawen
 *
 *@description: 页面配置类，只加载一次，工厂函数赋值，全类禁用new 的方式创建对象
 *
 *@createTime:2019/12/30
 *
 */
@Data
public class SocketPageConfig {
   //在这一步中只保证了有一个single对象，不需要重复加载
   private static SocketPageConfig single = null;
   
   private SocketPageConfig() {

   }

   public synchronized static SocketPageConfig getInstance() throws IOException {
      if (single == null) {
         single = new SocketPageConfig();
      }
      return single;
   }
   
   private HashMap<String, String[]> socketConfigMap;//主模块名称 ，模板静态map，请不要修改模板map，新建需要重新定义map，并仿照如下的方式进行配置

   private HashMap<String, String[]> weatherConfigMap;//气象预测模块推送，包括气象矩阵，卡片

   private HashMap<String, String[]> sisConfigMap;//sis配置
   public String[] getConfigMap(String mapKey){
         if(socketConfigMap==null){
            socketConfigMap = new HashMap<String, String[]>();
            //socket 主页面,依次排序，添加功能布局，每个页面进行一次注释
            socketConfigMap.put("socket1",CreateSocket1Config());//在此处进行功能化布局，表示在socket主页面下的一个功能
         }
         if(weatherConfigMap==null){
             weatherConfigMap = new HashMap<String, String[]>();
             weatherConfigMap.put("weatherProphet_1",Createweatherprophet_1Config());//气象预测今天数据，按天预测
             weatherConfigMap.put("weatherProphet_7",Createweatherprophet_7Config());//气象预测未来7天数据，按天预测，包含今天
             weatherConfigMap.put("weatherProphet_8_15",Createweatherprophet_8_15Config());//气象预测未来8~15天数据，按天预测，包含今天
             weatherConfigMap.put("weatherProphet_40",Createweatherprophet_40Config());//气象预测未来40天数据，按天预测，包含今天
             weatherConfigMap.put("weatherProphet_7Day_17Hour",Createweatherprophet_7Day_17HourConfig());//气象预测未来16小时数据，按小时预测，包含当前小时
         }

          if(sisConfigMap==null){
              sisConfigMap = new HashMap<String, String[]>();
               //socket 主页面,依次排序，添加功能布局，每个页面进行一次注释
              sisConfigMap.put("index_target_comprehensive_indicators",Createindex_target_comprehensive_indicatorsConfig());//首页第二部分指标模块的子模块1，综合指标模块，包括安全天数、装机容量、日发电量、预测发电量、上网电量
              sisConfigMap.put("index_target_windSpeed_power",Createindex_target_windSpeed_powerConfig());//首页第二部分指标模块的子模块2，风速功率模块，包括平均风速、预测风速、实际功率、理论功率
              sisConfigMap.put("index_windturbine_status",Createindex_windturbine_statusConfig());//首页第三部分风机状态模块，包括接入、待机、运行、故障、维护、离线
              sisConfigMap.put("index_electricQuantity",Createindex_electricQuantityConfig());//首页第四部分发电量完成情况模块，包括月计划发电量、年计划发电量
              sisConfigMap.put("index_target_basic_indicators",Createindex_target_basic_indicatorsConfig());//首页第二部分指标模块的子模块3,基础指标模块，包括月利用小时、年利用小时、综合场用电率、设备可利用率、减排二氧化硫、减排二氧化碳、节约用水、节约标煤、mttr、mtbf
              sisConfigMap.put("targetdetail_target",Createsis_targetdetail_target());//在此处进行功能化布局，表示在socket主页面下的一个功能
              sisConfigMap.put("targetdetail_curve",Createsis_targetdetail_curve());
              sisConfigMap.put("targetdetail_histogram",Createsis_targetdetail_histogram());
          }

         if (socketConfigMap.containsKey(mapKey)){
            return socketConfigMap.get(mapKey);
         }
         if (weatherConfigMap.containsKey(mapKey)){
            return weatherConfigMap.get(mapKey);
         }
         if (sisConfigMap.containsKey(mapKey)){
             return sisConfigMap.get(mapKey);
          }
         return null;
      }

   //特别注意:当进行配置时 页面编号+功能编号 不能重复 ,各个map中的key不能重复
   private String[] CreateSocket1Config() {
      return new String[]{"pageNumber_1","functionNumber_1"};//首个配置模块，用于模板，推送样例，页面编号pageNumber_1，功能编号functionNumber_1
   }

    private String[] Createweatherprophet_1Config() {
        return new String[]{"pageNumber_2","functionNumber_1"};//气象预测今天数据，按天预测，pageNumber_2，功能编号functionNumber_1
    }
    
    private String[] Createweatherprophet_7Config() {
        return new String[]{"pageNumber_3","functionNumber_1"};//气象预测未来7天数据，按天预测，包含今天，pageNumber_3，功能编号functionNumber_1
    }
    
    private String[] Createweatherprophet_8_15Config(){
    	return new String[]{"pageNumber_4","functionNumber_1"};//气象预测未来8~15天数据，按天预测，包括今天，pageNumber_4，功能编号functionNumber_1
    }
    
    private String[] Createweatherprophet_40Config() {
        return new String[]{"pageNumber_5","functionNumber_1"};//气象预测未来40天数据，按天预测，包含今天，pageNumber_5，功能编号functionNumber_1
    }
    
    private String[] Createweatherprophet_7Day_17HourConfig() {
        return new String[]{"pageNumber_3","functionNumber_2"};//气象预测未来16小时数据，按小时预测，包含当前小时，pageNumber_3，功能编号functionNumber_2
    }
    
    private String[] Createindex_target_comprehensive_indicatorsConfig() {
        return new String[]{"pageNumber_6","functionNumber_1"};//首页第二部分指标模块的子模块1，综合指标模块，包括安全天数、装机容量、日发电量、预测发电量、上网电量
    }
    
    private String[] Createindex_target_windSpeed_powerConfig() {
        return new String[]{"pageNumber_6","functionNumber_2"};//首页第二部分指标模块的子模块2，风速功率模块，包括平均风速、预测风速、实际功率、理论功率
    }
    
    private String[] Createindex_windturbine_statusConfig() {
        return new String[]{"pageNumber_6","functionNumber_3"};//首页第三部分风机状态模块，包括接入、待机、运行、故障、维护、离线
    }
    
    private String[] Createindex_electricQuantityConfig() {
        return new String[]{"pageNumber_6","functionNumber_4"};//首页第四部分发电量完成情况模块，包括月计划发电量、年计划发电量
    }

    private String[] Createindex_target_basic_indicatorsConfig() {
        return new String[]{"pageNumber_6","functionNumber_5"};//首页第二部分指标模块的子模块3,基础指标模块，包括月利用小时、年利用小时、综合场用电率、设备可利用率、减排二氧化硫、减排二氧化碳、节约用水、节约标煤、mttr、mtbf
    }

    private String[] Createsis_targetdetail_target() {
        return new String[]{"pageNumber_8","functionNumber_1"};//气象预测未来16小时数据，按小时预测，包含当前小时，pageNumber_3，功能编号functionNumber_2
    }

    private String[] Createsis_targetdetail_curve() {
        return new String[]{"pageNumber_8","functionNumber_2"};//气象预测未来16小时数据，按小时预测，包含当前小时，pageNumber_3，功能编号functionNumber_2
    }

    private String[] Createsis_targetdetail_histogram() {
        return new String[]{"pageNumber_8","functionNumber_3"};//气象预测未来16小时数据，按小时预测，包含当前小时，pageNumber_3，功能编号functionNumber_2
    }
 }

