// var Parse = getApp().Parse;
// var app = getApp()
// const { wxLogin } = require('./utils/login')
const CONFIG = require("config.js");
let config = {
  appid: CONFIG.default.appid,
  company: CONFIG.default.company,
  rootPage: CONFIG.default.rootPage,
}
const plugin = requirePlugin('fm-plugin')
const { Parse, checkAuth } = plugin

Page({
  /**
   * 页面的初始数据
   */
  data: {
    splashUrl: wx.getStorageSync("enabledOptions")[0],
    loading:true
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: async function (options) {
    wx.setStorageSync("invite", null);
    let str = decodeURIComponent(options.q); //扫描二维码获得的跳转链接
    let obj = this.getParaName(str)
    if (obj && obj.invite) {
      wx.setStorageSync("invite", obj.invite);
    }
    obj && Object.keys(obj).forEach(key=> options[key] = obj[key])
    this.setData({
      options: options
    })
    let {
      time,
      dramaId,
      roomId,
      orderId,
      shopId,
      invite,
      activityId,
      company,
      inviteHost
    } = options
    time && wx.setStorageSync("time", time);
    dramaId && wx.setStorageSync("dramaId", dramaId);
    roomId && wx.setStorageSync("roomId", roomId);
    orderId && wx.setStorageSync("orderId", orderId);
    shopId && wx.setStorageSync("shopId", shopId);
    invite && wx.setStorageSync("invite", invite);
    activityId && wx.setStorageSync("activityId", activityId);
    inviteHost && wx.setStorageSync("inviteHost", true);
    if (company) getApp().globalData.toCompany = true;
    plugin.init(config, wx.getStorageSync('invite'))
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: async function () { },


  /**
   * 生命周期函数--监听页面显示
   */
  onShow: async function () {
    await this.review()
  },

  async review(force){
    try {
      let options = this.data.options
      let url = getApp().globalData.rootPage || getApp().globalData.defaultTabBar.list[0].pagePath
      if (options) {
        let objArr = Object.keys(options)
        if (objArr && objArr.length > 0) {
          let parms = '?'
          objArr.forEach((o, index) => {
            if (index > 0) {
              parms += '&' + o + '=' + options[o]
            } else {
              parms += o + '=' + options[o]
            }
          })
          url += parms
        }
      }

      let currentUser = Parse.User.current()
      console.log(Parse.User.current())
      if (!currentUser || force) {
        // let data = await wxLogin()
        // if (data.statusCode == 200) {
         let r = await checkAuth(true)
         console.log(r);
        //  getApp().Parse = Parse
        //  getApp().checkAuth = checkAuth
         if(!r) return
        // }
      } else {
        this.updateUser(currentUser.id)
      }
      getApp().Parse = Parse
      getApp().checkAuth = checkAuth
      if (!await this.getCompanyServerExpire(url)) {
        return
      }
      wx.redirectTo({
          url: url,
      });
    }
    catch (err) {
      console.log(err);
      /* 登录身份信息到期,重新登陆 */
      if((err?.message.indexOf('Session token is expired') != -1 || err?.message.indexOf('Invalid session token') != -1) && !force){
        let invite = wx.getStorageSync('invite')
        wx.clearStorageSync()
        invite && wx.setStorageSync('invite', invite)
        /* 强制重新登录 */
        this.review(true)
        return
      }
      this.setData({
        loading:false
      })
      wx.showModal({
        title: '温馨提示',
        content: '服务器正在升级,请稍后重试。',
        showCancel: false,
        cancelText: '取消',
        cancelColor: '#000000',
        confirmText: '确定',
        confirmColor: '#3CC51F',
        success: (result) => {
          if (result.confirm) {
            wx.exitMiniProgram()
          }
        },
      });
    }
  },

  async updateUser(id) {
    let User = new Parse.Query('_User')
    let user = await User.get(id)
    let invite = wx.getStorageSync('invite')
    //查询邀请人user
    let query = new Parse.Query("_User")
    query.equalTo('objectId', invite)
    let result = await query.first()
    if (result && result.id && result.get("invite")?.id == user.id) {
      console.error('邀请人不能是自己的下级')
      return
    }
    if (invite && !user.get('invite') && user.id != invite && !user.get('agentLevel')) {
      console.log('上下级绑定成功');
      user.set('invite', {
        __type: "Pointer",
        className: "_User",
        objectId: invite
      })
      user.set('agent', {
        __type: "Pointer",
        className: "_User",
        objectId: invite
      })
      await Parse.Cloud.run('user_save', {
        userJson: user.toJSON()
      })
    }
  },
  async getCompanyServerExpire(url) {
    let query = new Parse.Query('Company')
    query.equalTo('objectId', getApp().globalData.company)
    query.select('expireDate', 'expireMap')
    let com = await query.first()
    if (com?.id && com?.get('expireDate')) {
      let now = + new Date()
      let expireTime = + new Date(com?.get('expireDate'))
      if (com?.get('expireMap') && com.get('expireMap')[getApp().globalData.appid]) {
        expireTime = + new Date(com.get('expireMap')[getApp().globalData.appid])
      }
      if (now >= expireTime) {
        console.log('服务器到期');
        wx.reLaunch({
          url: `common-page/pages/loading/index?url=${url}`,
        });
        return
      }
    }
    return true
  },

  onUnload: function () {
    wx.setStorageSync("active", 0);
  },
  getParaName(url) {
    if (!url || url.indexOf('?') == -1) {
      return
    }
    let paraname = url.split('?')[1]
    return this.setObject(paraname) //封装成对象
  },
  setObject(paraArr) {
    let obj = {}
    let arr1 = paraArr.split('&')
    arr1.forEach(item => {
      let str = item.split('=')
      let key = str[0]
      let val = str[1]
      obj[key] = val
    })
    return obj
  }
});