// 萤石云AccessToken管理工具
// 使用方法：
// 1. 在萤石云开放平台获取AppKey和AppSecret
// 2. 调用getAccessToken()获取新的token

class EzvizTokenManager {
  constructor(appKey, appSecret) {
    this.appKey = appKey
    this.appSecret = appSecret
    this.baseUrl = 'https://open.ys7.com/api/lapp'
  }

  // 获取AccessToken
  async getAccessToken() {
    try {
      console.log('🔑 开始获取AccessToken...')
      
      const response = await uni.request({
        url: `${this.baseUrl}/token/get`,
        method: 'POST',
        header: {
          'Content-Type': 'application/x-www-form-urlencoded'
        },
        data: {
          appKey: this.appKey,
          appSecret: this.appSecret
        }
      })

      console.log('📡 API响应:', response)

      if (response.data && response.data.code === '200') {
        const tokenData = response.data.data
        console.log('✅ AccessToken获取成功:', tokenData)
        
        // 保存到本地存储
        uni.setStorageSync('ezviz_access_token', tokenData.accessToken)
        uni.setStorageSync('ezviz_token_expire', tokenData.expireTime)
        
        return {
          success: true,
          accessToken: tokenData.accessToken,
          expireTime: tokenData.expireTime
        }
      } else {
        throw new Error(response.data?.msg || '获取AccessToken失败')
      }
      
    } catch (error) {
      console.error('❌ 获取AccessToken失败:', error)
      return {
        success: false,
        error: error.message
      }
    }
  }

  // 检查token是否过期
  isTokenExpired() {
    const expireTime = uni.getStorageSync('ezviz_token_expire')
    if (!expireTime) return true
    
    const now = Date.now()
    return now >= expireTime * 1000 // expireTime是秒，需要转换为毫秒
  }

  // 获取有效的AccessToken
  async getValidAccessToken() {
    // let token = uni.getStorageSync('ezviz_access_token')
    
    // if (!token || this.isTokenExpired()) {
    //   console.log('🔄 Token不存在或已过期，重新获取...')
    //   const result = await this.getAccessToken()
      
    //   if (result.success) {
    //     return result.accessToken
    //   } else {
    //     throw new Error(result.error)
    //   }
    // }
    const result = await this.getAccessToken()
      
    if (result.success) {
      return result.accessToken
    } else {
      throw new Error(result.error)
    }
    
    console.log('✅ 使用缓存的AccessToken')
    return token
  }

  // 获取设备信息
  async getDeviceList() {
    try {
      const accessToken = await this.getValidAccessToken()
      const response = await uni.request({
        url: `${this.baseUrl}/device/list`,
        method: 'POST',
        header: {
          'Content-Type': 'application/x-www-form-urlencoded'
        },
        data: {
          accessToken: accessToken,
          pageStart: 0,
          pageSize: 50
        }
      })

      if (response.data && response.data.code === '200') {
        return {
          success: true,
          devices: response.data.data
        }
      } else {
        throw new Error(response.data?.msg || '获取设备列表失败')
      }
      
    } catch (error) {
      console.error('❌ 获取设备列表失败:', error)
      return {
        success: false,
        error: error.message
      }
    }
  }
}

// 导出单例
const tokenManager = new EzvizTokenManager(
  // '19c3a50bc19a4b27832408e003797644',    // 你的AppKey
  // 'cf43a4f58bc64d7e37bba9947daf70b3'       // 你的AppSecret
  '19c3a50bc19a4b27832408e003797644',
  'cf43a4f58bc64d7e37bba9947daf70b3',
)

export default tokenManager

// 使用示例：
/*
import tokenManager from '@/utils/ezvizTokenManager.js'

// 获取新的AccessToken
const result = await tokenManager.getAccessToken()
if (result.success) {
  console.log('新的AccessToken:', result.accessToken)
} else {
  console.error('获取失败:', result.error)
}

// 获取有效的AccessToken（自动处理过期）
try {
  const token = await tokenManager.getValidAccessToken()
  console.log('有效的AccessToken:', token)
} catch (error) {
  console.error('获取AccessToken失败:', error)
}

// 获取设备列表
const devices = await tokenManager.getDeviceList()
if (devices.success) {
  console.log('设备列表:', devices.devices)
}
*/
