// 简化版本管理器 - 检测版本更新并提醒用户清理缓存
const config = require('../config/config.js');

class VersionManager {
  constructor() {
    this.currentVersion = config.appVersion;
    this.versionKey = 'app_version';
    this.isShowingDialog = false; // 防止重复弹框
  }

  /**
   * 检查版本更新
   * @returns {boolean} 如果有版本更新或正在显示弹框，返回 true
   */
  checkVersionUpdate() {
    try {
      // 🔥 如果正在显示弹框，直接返回 true，阻塞所有逻辑
      if (this.isShowingDialog) {
        console.log('⚠️ 版本更新弹框正在显示中，阻塞后续逻辑');
        return true;
      }

      const storedVersion = wx.getStorageSync(this.versionKey);
      // 首次安装直接保存版本号
      if (!storedVersion) {
        wx.setStorageSync(this.versionKey, this.currentVersion);
        return false;
      }

      // 版本不一致，提醒用户清理缓存
      if (storedVersion !== this.currentVersion) {
        console.log('⚠️ 检测到版本更新，旧版本:', storedVersion, '新版本:', this.currentVersion);
        // 防止重复弹框
        if (!this.isShowingDialog) {
          // 🔥 立即设置标志，防止在弹框显示期间其他逻辑继续执行
          this.isShowingDialog = true;
          // 延迟一帧显示弹框，确保标志已设置
          setTimeout(() => {
            this.showClearCacheDialog(storedVersion, this.currentVersion);
          }, 0);
        }
        return true;
      }

      return false;
    } catch (error) {
      console.error('版本检查失败:', error);
      return false;
    }
  }

  /**
   * 显示版本更新提示框
   */
  showClearCacheDialog(oldVersion, newVersion) {
    // 设置标志防止重复弹框
    this.isShowingDialog = true;

    wx.showModal({
      title: '版本更新',
      content: `FindMe已更新版本，需要重新登录以确保应用正常运行。`,
      showCancel: false, // 不显示取消按钮
      confirmText: '确定',
      success: (res) => {
        // 用户只能点确定，直接清理缓存并跳转
        this.clearCacheAndRestart(newVersion);
      },
      complete: () => {
        // 对话框关闭后重置标志
        this.isShowingDialog = false;
      }
    });
  }

  /**
   * 清理缓存并重启应用
   */
  clearCacheAndRestart(newVersion) {
    wx.showLoading({
      title: '正在重启应用...',
      mask: true
    });

    try {
      // 🔥 清除全局登录状态（必须在清除存储之前）
      try {
        const app = getApp();
        if (app) {
          app.globalData.isLoggedIn = false;
          app.globalData.userInfo = null;
          app.globalData.nim = null; // 清除 NIM 实例
          console.log('✅ 已清除全局登录状态');
        }
      } catch (globalError) {
        console.error('清除全局状态失败:', globalError);
      }

      // 清理所有缓存数据
      wx.clearStorageSync();

      // 更新版本号
      wx.setStorageSync(this.versionKey, newVersion);

      setTimeout(() => {
        wx.hideLoading();

        // 直接跳转到登录页面
        wx.reLaunch({
          url: '/pages/login/login'
        });
      }, 1500); // 稍微延长一点时间确保清理完成

    } catch (error) {
      wx.hideLoading();
      console.error('清理缓存失败:', error);
      
      // 🔥 即使清理失败也清除全局状态
      try {
        const app = getApp();
        if (app) {
          app.globalData.isLoggedIn = false;
          app.globalData.userInfo = null;
          app.globalData.nim = null;
        }
      } catch (globalError) {
        console.error('清除全局状态失败:', globalError);
      }
      
      wx.showToast({
        title: '清理失败，请手动清理',
        icon: 'error'
      });

      // 即使清理失败也跳转到登录页
      setTimeout(() => {
        wx.reLaunch({
          url: '/pages/login/login'
        });
      }, 2000);
    }
  }

}

// 导出单例
module.exports = new VersionManager();

