// app.js
const { utils } = require('./utils/api.js');
const loadFont = require('./utils/font.js');

loadFont.loadCloudFontFace('https://klmybwg.4dage.com/mini/wxImg/SOURCEHANSERIFSC-HEAVY.OTF', 'SOURCEHANSERIFSC-HEAVY.OTF', 'heavy')
App({
  onload() {
    wx.hideTabBar();
  },
  onShow() {
    wx.hideTabBar();
  },
  onLaunch() {
    // 展示本地存储能力
    const logs = wx.getStorageSync('logs') || []
    // logs.unshift(Date.now())
    // wx.setStorageSync('logs', logs)
    // wx.loadFontFace({
    //   global: true,
    //   family: 'heavy',
    //   source: "https://klmybwg.4dage.com/mini/wxImg/SOURCEHANSERIFSC-HEAVY.OTF",
    //   success(res) {
    //     console.log('加载成功:', res + 'heavy')
    //   },
    //   fail(err) {
    //     console.log('加载失败:', err)
    //   }
    // })
    // 检查是否已有登录状态
    const token = wx.getStorageSync('token')
    if (token) {
      // 已登录，直接设置全局数据
      this.globalData.token = token
      const userInfo = wx.getStorageSync('userInfo')
      if (userInfo) {
        this.globalData.userInfo = userInfo
      }
      // 获取访问token
      this.getAccessToken()
      // 启动定时刷新token
      this.startTokenRefreshTimer()
    } else {
      // 未登录，显示授权弹窗
      // this.showLoginModal()
    }
  },

  // 显示登录授权弹窗
  showLoginModal() {
    wx.showModal({
      title: '登录授权',
      content: '为了给您提供更好的服务，需要获取您的微信登录信息，是否同意？',
      confirmText: '同意',
      cancelText: '暂不',
      success: (res) => {
        if (res.confirm) {
          // 用户同意，进行微信登录
          this.wxLogin()
        } else {
          // 用户拒绝，保持未登录状态
          console.log('用户拒绝登录授权，保持未登录状态')
          this.globalData.isGuest = true
        }
      }
    })
  },

  // 微信登录方法
  wxLogin() {
    wx.login({
      success: (res) => {
        if (res.code) {
          console.log('微信登录获取code成功:', res.code)
          // 调用登录接口
          this.callLoginApi(res.code)
        } else {
          console.error('微信登录失败:', res.errMsg)
        }
      },
      fail: (error) => {
        console.error('微信登录调用失败:', error)
      }
    })
  },

  // 调用登录接口
  callLoginApi(code) {
    wx.request({
      url: 'https://klmybwg.4dage.com/api/museum/wxMini/login',
      // url: 'https://sit-kelamayi.4dage.com/api/museum/wxMini/login',
      method: 'GET',
      data: {
        code: code
      },
      header: {
        'content-type': 'application/x-www-form-urlencoded'
      },
      success: (response) => {
        console.log('登录接口调用成功:', response.data)
        if (response.data && response.data.code === 0) {
          // 存储基本用户信息（微信用户）
          const basicUserInfo = {
            nickName: '微信用户',
            avatarUrl: 'https://mmbiz.qpic.cn/mmbiz/icTdbqWNOwNRna42FI242Lcia07jQodd2FJGIYQfG0LAJGFxM4FbnQP6yfMxBgJ0F3YRqJCJ1aPAK2dQagdusBZg/0',
            isWxUser: true
          }
          const token = response.data.data.token
          this.globalData.userInfo = basicUserInfo
          wx.setStorageSync('userInfo', basicUserInfo)
          // 存储token到全局数据
          this.globalData.token = token
          // 也存储到本地存储
          wx.setStorageSync('token', token)
          // 登录成功，设置为非游客状态
          this.globalData.isGuest = false
          console.log('token获取成功:', token)
          // 登录成功后获取token
          this.getAccessToken()
          // 启动定时刷新token
          this.startTokenRefreshTimer()
          // 通知所有页面更新登录状态
          this.notifyLoginStatusChange()
        } else {
          console.error('登录失败:', response.data.message || '未知错误')
        }
      },
      fail: (error) => {
        console.error('登录接口调用失败:', error)
      }
    })
  },

  // 获取访问token
  getAccessToken() {
    wx.request({
      url: 'https://klmybwg.4dage.com/api/museum/wxMini/getAccessToken',
      // url: 'https://sit-kelamayi.4dage.com/api/museum/wxMini/getAccessToken',
      method: 'GET',
      header: {
        'content-type': 'application/x-www-form-urlencoded'
      },
      success: (response) => {
        console.log('获取accessToken接口调用成功:', response.data)
        if (response.data && response.data.code === 0) {
          const accessToken = response.data.data
          // 存储token到全局数据
          this.globalData.accessToken = accessToken
          
          // 也存储到本地存储
          wx.setStorageSync('accessToken', accessToken)
          
          console.log('accessToken获取成功:', accessToken)
        } else {
          console.error('获取token失败:', response.data.message || '未知错误')
        }
      },
      fail: (error) => {
        console.error('获取token接口调用失败:', error)
      }
    })
  },

  // 手动触发登录（供其他页面调用）
  triggerLogin() {
    this.showLoginModal()
  },

  // 启动定时刷新token
  startTokenRefreshTimer() {
    // 清除之前的定时器
    if (this.globalData.refreshTimer) {
      clearInterval(this.globalData.refreshTimer)
    }
    
    // 设置每10分钟刷新一次token（600000毫秒）
    this.globalData.refreshTimer = setInterval(() => {
      if (this.globalData.token) {
        console.log('定时刷新token开始')
        utils.refreshToken()
          .then(newToken => {
            console.log('定时刷新token成功:', newToken)
          })
          .catch(error => {
            console.error('定时刷新token失败:', error)
            // 如果刷新失败，可能需要重新登录
            if (error.includes('token') || error.includes('401')) {
              this.logout()
              this.showLoginModal()
            }
          })
      }
    }, 600000) // 10分钟 = 600000毫秒
  },

  // 停止定时刷新token
  stopTokenRefreshTimer() {
    if (this.globalData.refreshTimer) {
      clearInterval(this.globalData.refreshTimer)
      this.globalData.refreshTimer = null
    }
  },

  // 退出登录
  logout() {
    // 停止定时刷新token
    this.stopTokenRefreshTimer()
    
    // 清除本地存储
    wx.removeStorageSync('token')
    wx.removeStorageSync('userInfo')
    wx.removeStorageSync('accessToken')
    
    // 清除全局数据
    this.globalData.userInfo = null
    this.globalData.token = null
    this.globalData.accessToken = null
    this.globalData.isGuest = true
    
    console.log('用户已退出登录')
    
    // 通知所有页面更新登录状态
    this.notifyLoginStatusChange()
  },

  // 通知所有页面更新登录状态
  notifyLoginStatusChange() {
    // 获取当前页面栈
    const pages = getCurrentPages()
    if (pages.length > 0) {
      // 获取当前页面
      const currentPage = pages[pages.length - 1]
      // 如果当前页面有checkLoginStatus方法，则调用它
      if (currentPage && typeof currentPage.checkLoginStatus === 'function') {
        currentPage.checkLoginStatus()
      }
    }
  },

  globalData: {
    userInfo: null,
    token: null,
    accessToken: null,
    isGuest: false, // 是否为游客状态
    refreshTimer: null // 定时刷新token的定时器
  }
})
