//package com.sunyard.ssp.server;
//
//
//import com.alibaba.fastjson.JSONObject;
//import com.sunyard.ssp.proto.control.Control;
//import lombok.Cleanup;
//import lombok.SneakyThrows;
//import lombok.extern.slf4j.Slf4j;
//
//import java.io.BufferedReader;
//import java.io.File;
//import java.io.FileInputStream;
//import java.io.FileOutputStream;
//import java.io.FileReader;
//import java.io.IOException;
//import java.nio.charset.Charset;
//import java.util.Map;
//import java.util.UUID;
//
///**
// * 这个类暂时先这么记着
// * [TODO] 读写分离
// * [TODO] 对接配置中心，热重载。
// */
//@Slf4j
//public class Config {
//
//    public static Config global = new Config();
//
//    public System system = new System();
//    public static class System {
//        public String name;
//
//        public System() {
//            this.name = findName();
//        }
//
//        private boolean getBooleFromEnv(String name){
//            log.debug("尝试从环境变量载入 {}", name);
//            Map map = java.lang.System.getenv();
//            if ( map.containsKey(name) ){
//                String sn = (String) map.get(name);
//                if ( "true".equals( sn.trim().toLowerCase() ) ){
//                    return true;
//                }
//            }
//
//            return false;
//        }
//
//        private String readNameFromFile(){
//            // 检查路径
//            File folder = new File("/data");
//            if ( !folder.exists() ){
//                folder.mkdirs();
//            }
//
//            File snFile = new File(folder, "security.name");
//            if ( snFile.exists() ){
//                try(FileReader fr = new FileReader(snFile) ; BufferedReader bfr = new BufferedReader(fr) ) {
//
//                    String sn = bfr.readLine();
//                    sn = sn.trim().toLowerCase();
//                    if ( sn.length() >= 6 ){
//                        saveNameToFile(sn);
//                        return sn;
//                    } else {
//                        log.debug("security.name 的值不合规");
//                        return null;
//                    }
//
//                } catch (IOException e) {
//                    e.printStackTrace();
//                    log.error("写入 security.name 配置文件的时候失败了，{}", snFile.getAbsolutePath() );
//                    return null;
//                }
//            } else {
//                log.error("security.name 配置文件不存在，{}", snFile.getAbsolutePath() );
//                return null;
//            }
//        }
//
//        private String genSn(){
//            return UUID.randomUUID().toString().replaceAll("-","");
//        }
//
//        private void saveNameToFile( String sn ){
//            // 检查路径
//            File folder = new File("/data");
//            if ( !folder.exists() ){
//                folder.mkdirs();
//            }
//
//            File snFile = new File(folder, "security.name");
//            if ( snFile.exists() ){
//                snFile.delete();
//            }
//
//            try( FileOutputStream fio = new FileOutputStream(snFile); ) {
//
//                snFile.createNewFile();
//
//                fio.write( sn.getBytes(Charset.forName("UTF-8")) );
//                fio.flush();
//
//            } catch (IOException e) {
//                e.printStackTrace();
//                log.error("写入 security.name 配置文件的时候失败了，{}", snFile.getAbsolutePath() );
//            }
//
//            log.debug("写入 security.name 配置文件完成，SERVER_NAME = {}，{}", sn, snFile.getAbsolutePath());
//        }
//
//        private String findName(){
//            log.debug("尝试从环境变量载入 SERVER_NAME");
//            Map map = java.lang.System.getenv();
//            if ( map.containsKey("SERVER_NAME") ){
//                 String sn = (String) map.get("SERVER_NAME");
//                 sn = sn.trim().toUpperCase();
//                 if ( sn.length() >= 6 ){
//                     //saveNameToFile(sn);
//                     return sn;
//                 } else {
//                     log.debug("环境变量 SERVER_NAME 的值不合规");
//                 }
//            }
//
//            log.debug("尝试从 security.name 配置载入 SERVER_NAME");
//            String sn = readNameFromFile();
//            if ( null != sn){
//                return sn;
//            }
//
//            sn = genSn();
////            saveNameToFile( sn );
//            return sn;
//        }
//    }
//
//    public Messenger messenger = new Messenger();
//    public static class Messenger {
//        //cluster solo
//        public JSONObject redisCluster = (JSONObject) loadFileConfig("redis.config.json");
//        public int maxWaitTime = 10; // 秒
//
//        public String privateCliChannel(){
//            return Control.Req.Origin.CLI.name() + "_" + Config.global.system.name;
//        }
//        public String privateServerChannel(){
//            return Control.Req.Origin.SERVER.name() + "_" + Config.global.system.name;
//        }
//
//    }
//
//    @SneakyThrows
//    public static JSONObject loadFileConfig(String name ){
//        File folder = new File("./config");
//        File configFile = new File(folder, name);
//        if ( ! configFile.exists() ){
//            log.error("没有找到配置文件 {}", name);
//        }
//        @Cleanup FileInputStream fio = new FileInputStream(configFile);
//        byte[] buff = new byte[ fio.available() ];
//        fio.read( buff );
//        return (JSONObject) JSONObject.parse( new String(buff) );
//    }
//}
