import User from '../model/User';
import axios from 'axios';
class ReLoginStore{

    timerId = 0;
    timerObj = {};//控制轮训的标识位

    unitTime =  1000;  //单位秒
    intervalTime =  10 * this.unitTime; //轮训时间间隔  
    delayTime =  30 * this.unitTime; //轮训时间间隔

    /**
     * 设置轮训时间间隔
     * @param {*} intervalTime 秒
     */
    setIntervalTime(intervalTime){
        this.intervalTime = intervalTime * this.unitTime;
        return this;
    }

    /**
     * 设置延迟启动时间
     * @param {*} delayTime 
     */
    setDelayTime(delayTime){
        this.delayTime = delayTime * this.unitTime;
        return this;
    }

    /**
     * 重登陆方法
     */
    static async relogin() {
        const user = Object.assign(new User(),User.restore());
        const param = {
            clientName: window.localStorage.clientName,
            desc: window.localStorage.desc
        }
        await user.loginTplus(param);
    }

    /**
     * 延长session时长  重连接口
     */
    static async reconnect() {
        const user = User.restore();
        return new Promise((resolve,reject)=>{
            axios.create({baseURL: user.channel.targetURL}).get(`/sm/runmanage/linktplus.aspx?method=getonlinusers&token=${user.tplusToken}`).then((res)=>{
                if(res.status === 200 ){
                    resolve(true);
                }else{
                    resolve(false);
                }
            });
        });
    }

    /**
     * 判断当前环境是否是云部署
     */
    async isCloudProxy(){
        const user = User.restore();
        return new Promise((resolve,reject)=>{
            axios.create({baseURL: user.channel.targetURL}).get('/ajaxpro/Ufida.T.SM.Login.UIP.LoginManager,Ufida.T.SM.Login.UIP.ashx?method=GetVersionType').then((res)=>{
                if(res.status === 200 && res.data.value && res.data.value.IsCloudDeployment){
                    resolve(res.data.value.IsCloudDeployment);
                }else{
                    resolve(false);
                }
            });
        });
    }

    /**
     * 开启重登陆轮询
     */
    async start () {
      await this.delay();
      const id = this.timerId++;
      this.timerObj[id] = true;
      let timerObj = this.timerObj;
      let intervalTime = this.intervalTime;
      async function timerFn () {
        if (!timerObj[id]) {
            return
        }
        await ReLoginStore.reconnect();
        setTimeout(timerFn, intervalTime);
      }
      timerFn()
    }

    async delay(){
        const delayTime = this.delayTime;
        return new Promise((resolve,reject)=>{
            setTimeout(()=>{
                resolve();
            },delayTime);
        });
    }

    /**
     * 关闭轮询
     */
    stop () {
      this.timerObj = {}
    }
}
export default ReLoginStore;