import { Singleton, Container, Scope, Inject } from "typescript-ioc";
import * as schedule from 'node-schedule'
import { Config } from '../config/Config'
import { RedisUtil } from '../redis/RedisUtil';
import { logger } from 'mslib'

@Singleton
export class DefaultVersionSchedule {

    async init() {
        let redisUtil = new RedisUtil()
        logger.info('初始化设置默认版本开始 >>>>>>>>')
        await this.setDefaultVersion(redisUtil);
        logger.info('初始化设置默认版本完成 >>>>>>>>')
        let jobIsRunning = false;
        schedule.scheduleJob('0/5 * * * * ?', async () => {
            logger.info('定时拉取默认版本开始 >>>>>>>>')
            if (jobIsRunning) {
                return
            }
            try {
                jobIsRunning = true
                await this.setDefaultVersion(redisUtil);
            } finally {
                jobIsRunning = false
            }
            logger.info('定时拉取默认版本结束 >>>>>>>>')
        });
    }

    /**
     * 设置默认版本
     * @param redisUtil 
     * @returns 
     */
    async setDefaultVersion(redisUtil: RedisUtil) {
        try {
            if (!redisUtil) {
                logger.info(`设置默认版本，redisUtil初始化未完成>>>>>>>>host:${Config.getRedisLockHost()}`)
                return
            }
            let newDefaultVersions = await redisUtil.get('KT_EC_DEFAULT_VERSIONS')
            let oldDefaultVersions = JSON.stringify(Config.getDefaultVersions())
            if (!newDefaultVersions) {
                logger.info('设置默认版本，newDefaultVersions值为空')
                return
            }
            if (oldDefaultVersions == newDefaultVersions) {
                logger.info(`设置默认版本，新旧默认版本一致，不用更新...newDefaultVersions:${newDefaultVersions}`)
                return
            }
            Config.setDefaultVersions(JSON.parse(newDefaultVersions))
            logger.info(`设置默认版本，成功>>>>>>>>newDefaultVersions:${newDefaultVersions}`)
        } catch (e) {
            logger.error(`设置默认版本，异常>>>>>>>>${e}`)
        }
    }
}