package com.nmgs;

import com.nmgs.util.PathUtil;
import com.trkf.PasswordEncryption.PassWordUtils;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.env.EnvironmentPostProcessor;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.PropertiesPropertySource;

import java.io.File;
import java.io.FileInputStream;
import java.util.Properties;

@Configuration
public class MyEnvironmentPostProcessor implements EnvironmentPostProcessor {

    @Override
    public void postProcessEnvironment(ConfigurableEnvironment configurableEnvironment, SpringApplication application) {
        System.out.println("IntegralManager读取公用配置文件======");
        //公用配置文件路径
        String path = PathUtil.applicationPath;
        //本项目配置文件路径
        String NewPath = PathUtil.projectApplicationPath;
        System.out.println("Loading local settings from : " + path);
        System.out.println("Loading local settings from : " + NewPath);
        Properties properties = new Properties();
        Properties Newproperties = new Properties();
        try {
            File fileproperties = new File(path);
            File fileNewproperties = new File(NewPath);
            // 判断文件夹是否存在
            if (!fileproperties.exists()) {
                fileproperties.createNewFile();
            }
            if (!fileNewproperties.exists()) {
                fileNewproperties.createNewFile();
            }
            properties.load(new FileInputStream(path));
            String DBType = properties.getProperty("DBType") == null ? "1" : properties.getProperty("DBType");
            Newproperties.load(new FileInputStream(NewPath));
            properties.setProperty("spring.logback.logPath",PathUtil.TomcatPath+"/logs");
            properties.setProperty("spring.datasource.url",properties.getProperty("DBUrl"));
            properties.setProperty("spring.datasource.username",properties.getProperty("DBUserName"));
            properties.setProperty("spring.datasource.password",PassWordUtils.decrypt(properties.getProperty("DBPassWord")));
            if(DBType.equals("1")){
                properties.setProperty("spring.datasource.driver-class-name",Newproperties.getProperty("sqlClassName"));
                properties.setProperty("spring.datasource.validationQuery",Newproperties.getProperty("sqlvalidationQuery"));
                properties.setProperty("spring.datasource.hikari.connection-test-query",Newproperties.getProperty("sqlvalidationQuery"));
            }else if(DBType.equals("2")){
                properties.setProperty("spring.datasource.driver-class-name",Newproperties.getProperty("OracleClassName"));
                properties.setProperty("spring.datasource.validationQuery",Newproperties.getProperty("OraclevalidationQuery"));
                properties.setProperty("spring.datasource.hikari.connection-test-query",Newproperties.getProperty("OraclevalidationQuery"));
            }else if(DBType.equals("3")){
                properties.setProperty("spring.datasource.driver-class-name",Newproperties.getProperty("DMClassName"));
                properties.setProperty("spring.datasource.validationQuery",Newproperties.getProperty("DMvalidationQuery"));
                properties.setProperty("spring.datasource.hikari.connection-test-query",Newproperties.getProperty("DMvalidationQuery"));
            }else if(DBType.equals("4")){
                properties.setProperty("spring.datasource.driver-class-name",Newproperties.getProperty("MySQLClassName"));
                properties.setProperty("spring.datasource.validationQuery",Newproperties.getProperty("MySQLvalidationQuery"));
                properties.setProperty("spring.datasource.hikari.connection-test-query",Newproperties.getProperty("MySQLvalidationQuery"));
            }
            System.out.println("---------------------------IntegralManager本次载入数据库----------------------");
            System.out.println("server.port:  " + properties.getProperty("server.port"));
            System.out.println("server.ip:  " + properties.getProperty("server.ip"));

            System.out.println("       url       :  " + properties.getProperty("spring.datasource.url"));
            System.out.println("     username    :  " + properties.getProperty("spring.datasource.username"));
            System.out.println("     password    :  " + properties.getProperty("spring.datasource.password"));
            System.out.println("     driver-class-name    :  " + properties.getProperty("spring.datasource.driver-class-name"));
            //环境名称随意取，但尽量不能和其他环境名称相同，避免不生效
            PropertiesPropertySource propertySource = new PropertiesPropertySource("environmentPostProcessor", properties);
            PropertiesPropertySource newPropertySource = new PropertiesPropertySource("newEnvironmentPostProcessor", Newproperties);
            //外部的文件是最先导入的
            configurableEnvironment.getPropertySources().addFirst(propertySource);
            //如果公用配置文件没有配置的则使用本项目的配置文件
            configurableEnvironment.getPropertySources().addLast(newPropertySource);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
