/**
 * 调试工具函数
 * 在真机调试时，console 可能不可见，使用此工具可以：
 * 1. 开发环境：使用 console
 * 2. 生产环境：使用 uni.showModal 或存储到本地
 */

const isDev = import.meta.env?.MODE === 'development' || import.meta.env?.DEV

// 存储日志（用于真机调试时查看）
const logs = []
const MAX_LOGS = 50

function addLog(type, ...args) {
  const timestamp = new Date().toLocaleTimeString()
  logs.push({ type, timestamp, args: args.map(arg => 
    typeof arg === 'object' ? JSON.stringify(arg, null, 2) : String(arg)
  )})
  if (logs.length > MAX_LOGS) {
    logs.shift()
  }
}

/**
 * 调试日志
 */
export function debugLog(...args) {
  if (isDev) {
    console.log('[DEBUG]', ...args)
  } else {
    addLog('log', ...args)
    // 真机调试时，可以通过长按某个按钮或特定手势触发显示日志
  }
}

/**
 * 错误日志
 */
export function debugError(...args) {
  if (isDev) {
    console.error('[ERROR]', ...args)
  } else {
    addLog('error', ...args)
    // 真机调试时显示错误
    // #ifdef MP-WEIXIN
    // 微信小程序真机调试时，可以在微信开发者工具中查看日志
    console.error('[ERROR]', ...args)
    // #endif
  }
}

/**
 * 警告日志
 */
export function debugWarn(...args) {
  if (isDev) {
    console.warn('[WARN]', ...args)
  } else {
    addLog('warn', ...args)
  }
}

/**
 * 显示调试信息（真机调试时使用）
 */
export function showDebugInfo(title = '调试信息', data) {
  const dataStr = typeof data === 'object' ? JSON.stringify(data, null, 2) : String(data)
  uni.showModal({
    title,
    content: dataStr.length > 500 ? dataStr.substring(0, 500) + '...' : dataStr,
    showCancel: false,
    confirmText: '确定',
  })
}

/**
 * 获取所有日志
 */
export function getLogs() {
  return logs
}

/**
 * 清空日志
 */
export function clearLogs() {
  logs.length = 0
}

/**
 * 显示所有日志（真机调试时使用）
 */
export function showAllLogs() {
  if (logs.length === 0) {
    uni.showToast({ title: '暂无日志', icon: 'none' })
    return
  }
  const logsStr = logs.map(log => 
    `[${log.timestamp}] [${log.type.toUpperCase()}] ${log.args.join(' ')}`
  ).join('\n')
  
  uni.showModal({
    title: `调试日志 (${logs.length}条)`,
    content: logsStr.length > 500 ? logsStr.substring(0, 500) + '...' : logsStr,
    showCancel: true,
    cancelText: '清空',
    confirmText: '确定',
    success: (res) => {
      if (res.cancel) {
        clearLogs()
        uni.showToast({ title: '日志已清空', icon: 'success' })
      }
    },
  })
}
