package com.sunxung.factoring.start.impl;

import com.sunxung.factoring.component.util.MockAdminThreadLocalUtil;
import com.sunxung.factoring.entity.sys.SqlVersion;
import com.sunxung.factoring.start.StartLoad;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
 * 系统启动环境加载实现
 */
@Component
public class StartLoadImpl implements StartLoad {

    private static Logger log = LogManager.getLogger(StartLoadImpl.class);
    /**
     * 是否初始化
     */
    @Value(value = "${data.init}")
    private boolean init;
    /**
     * 升级最大版本号
     */
    @Value(value = "${data.upgradeVersion}")
    private int maxVersion;

    @Override
    public void run() throws Exception {
        if (init) {
            init();
        }
    }

    /**
     * 初始化
     *
     * @throws Exception
     */
    private void init() throws Exception {
        long startTime = System.currentTimeMillis();
        log.error("开始初始化");
        log.error("开始初始化数据库");
        MockAdminThreadLocalUtil.mock();
        log.error("开始初始化字典项");
        new DictionaryInit().run();
        log.error("开始初始化权限");
        new PermissionInit().run();
        log.error("开始初始化组织机构");
        new OrgInit().run();
        log.error("开始初始化行政区划");
        log.error("开始初始化角色");
        new RoleInit().run();
        log.error("开始初始化用户");
        new UserInit().run();
        log.error("开始初始化工作日");
        new WorkingDayInit().run();
        log.error("开始初始化脚本升级最大版本号");
        addSqlVersion();
        log.error("成功初始化，耗时：" + (System.currentTimeMillis() - startTime) / 1000.0 + "秒");
        MockAdminThreadLocalUtil.destroy();
    }

    /**
     * 添加升级脚本
     */
    private void addSqlVersion() {
        SqlVersion sqlVersion = new SqlVersion();
        sqlVersion.setVersion(maxVersion);
    }
}
