package com.beiyin;

import com.beiyin.common.context.SpringContextUtils;
import com.beiyin.common.schedule.HeartbeatSchedule;
import com.beiyin.service.impl.DispatchServiceImpl;
import com.beiyin.service.impl.InitialDataServiceImpl;
import com.beiyin.service.impl.MasterNodeServiceImpl;

import java.util.UUID;

import org.springframework.boot.Banner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@SpringBootApplication
@EnableTransactionManagement
public class Application {
    public static void main(String[] args) {
        SpringApplication springApplication = new SpringApplication(Application.class);
        springApplication.setBannerMode(Banner.Mode.OFF);
        springApplication.run(args);
        System.out.println(" 应用启动配置加载加载成功！");
        if (args != null && args.length > 0)
            if ("init".equals(args[0])) {
                System.out.println(" 数据初始化开始 ...");
                InitialDataServiceImpl initialDataServiceImpl = (InitialDataServiceImpl) SpringContextUtils.getBean(InitialDataServiceImpl.class);
                initialDataServiceImpl.setDatacfg_id(args[1]);
                initialDataServiceImpl.setProcess_id(UUID.randomUUID().toString().replace("-", ""));
                initialDataServiceImpl.run();
                System.exit(0);
            } else if ("test".equals(args[0])) {
                System.out.println(" 测试执行开始");
                DispatchServiceImpl dispatchServiceImpl = (DispatchServiceImpl) SpringContextUtils.getBean(DispatchServiceImpl.class);
                dispatchServiceImpl.setDatacfg_id(args[1]);
                dispatchServiceImpl.setProcess_id(UUID.randomUUID().toString().replace("-", ""));
                dispatchServiceImpl.setTrancfg_testid(args[2]);
                dispatchServiceImpl.setIsolationLevel(args[3]);
                dispatchServiceImpl.run();
                System.exit(0);
            } else if ("master".equals(args[0])) {
                HeartbeatSchedule.isMaster = true;
            } else if ("masterinit".equals(args[0])) {
                System.out.println(" 数据初始化开始 ...");
                InitialDataServiceImpl initialDataServiceImpl = (InitialDataServiceImpl) SpringContextUtils.getBean(InitialDataServiceImpl.class);
                initialDataServiceImpl.setDatacfg_id(args[1]);
                initialDataServiceImpl.setProcess_id(UUID.randomUUID().toString().replace("-", ""));
                initialDataServiceImpl.run();
                System.exit(0);
            } else if ("mastertest".equals(args[0])) {
                System.out.println(" 测试执行开始");
                MasterNodeServiceImpl masterNodeServiceImpl = (MasterNodeServiceImpl) SpringContextUtils.getBean(MasterNodeServiceImpl.class);
                masterNodeServiceImpl.setDatacfg_id(args[1]);
                masterNodeServiceImpl.setTrancfg_testid(args[2]);
                masterNodeServiceImpl.setProcess_id(UUID.randomUUID().toString().replace("-", ""));
                masterNodeServiceImpl.setIsolationLevel(args[3]);
                masterNodeServiceImpl.run();
                System.exit(0);
            }
    }
}
