// 认证相关错误码
export const AUTH_ERROR_CODES = {
  // 注册相关 (E001-E010)
  E001: { code: 'E001', message: '用户名已存在' },
  E002: { code: 'E002', message: '邮箱已被注册' },
  E003: { code: 'E003', message: '推荐码无效' },
  E004: { code: 'E004', message: '没有待验证的注册请求' },
  E005: { code: 'E005', message: '注册验证码错误' },
  E006: { code: 'E006', message: '已绑定过邀请码' },
  E007: { code: 'E007', message: '不能绑定自己的邀请码' },

  // 登录相关 (E011-E020)
  E011: { code: 'E011', message: '邮箱或密码错误' },
  E012: { code: 'E012', message: '账户已被临时锁定' },
  E013: { code: 'E013', message: '没有待验证的登录请求' },
  E014: { code: 'E014', message: '用户不存在或已被禁用' },
  E015: { code: 'E015', message: '登录验证码错误' },
  E016: { code: 'E016', message: 'Telegram认证数据无效' },
  E017: { code: 'E017', message: 'Telegram数据格式错误' },
  E018: { code: 'E018', message: 'Google认证失败' },
  E019: { code: 'E019', message: '请提供Google Token' },

  // 密码相关 (E021-E030)
  E021: { code: 'E021', message: '当前密码错误' },
  E022: { code: 'E022', message: '新密码不能与当前密码相同' },
  E023: { code: 'E023', message: '该邮箱未注册' },
  E024: { code: 'E024', message: '账号已被禁用' },
  E025: { code: 'E025', message: '没有待处理的找回密码请求' },
  E026: { code: 'E026', message: '找回密码验证码已过期' },
  E027: { code: 'E027', message: '找回密码验证码错误' },
  E028: { code: 'E028', message: '用户不存在' },
  E029: { code: 'E029', message: '没有提供要修改的字段' },

  // API Key 签名相关 (E031-E040)
  E031: { code: 'E031', message: '时间戳过期或无效' },
  E032: { code: 'E032', message: 'API Key不存在' },
  E033: { code: 'E033', message: 'API Key已禁用' },
  E034: { code: 'E034', message: '用户账户已禁用' },
  E035: { code: 'E035', message: '签名无效' },
  E036: { code: 'E036', message: '最多允许5个有效的API Key' },
  E037: { code: 'E037', message: '无效的Key ID' },
  E038: { code: 'E038', message: 'API Key不存在' },

  // 邮箱验证相关 (E041-E055)
  E041: { code: 'E041', message: '发送验证码过于频繁' },
  E042: { code: 'E042', message: '邮箱验证码已过期' },
  E043: { code: 'E043', message: '邮箱验证码错误' },
  E044: { code: 'E044', message: '邮箱已验证' },
  E045: { code: 'E045', message: '邮箱已被其他用户使用' },
  E046: { code: 'E046', message: '没有已验证的邮箱' },
  E047: { code: 'E047', message: '请先发送当前邮箱验证码' },
  E048: { code: 'E048', message: '需要先验证当前邮箱' },
  E049: { code: 'E049', message: '请先发送新邮箱验证码' },
  E050: { code: 'E050', message: '无效的action参数' },
  E051: { code: 'E051', message: '提现验证请求过于频繁' },
  E052: { code: 'E052', message: '用户必须有已验证的邮箱' },
  E053: { code: 'E053', message: '邮箱与已验证邮箱不匹配' },
  E054: { code: 'E054', message: '提现验证码已过期' },
  E055: { code: 'E055', message: '提现验证数据不匹配' },

  // 管理接口相关 (E061-E070)
  E061: { code: 'E061', message: '权限不足' },
  E062: { code: 'E062', message: '用户不存在' },
  E063: { code: 'E063', message: '角色不存在' },
  E064: { code: 'E064', message: '角色正在使用中，无法删除' },
  E065: { code: 'E065', message: '系统角色不可修改/删除' },
  E066: { code: 'E066', message: '无效的状态值' },
  E067: { code: 'E067', message: '只能查看团队成员信息' },

  // 通用错误 (E091-E099)
  E091: { code: 'E091', message: '请求参数验证失败' },
  E092: { code: 'E092', message: '请求频率过快' },
  E093: { code: 'E093', message: '未授权，请重新登录' },
  E094: { code: 'E094', message: '登录已过期，请重新登录' },
  E095: { code: 'E095', message: '登录已失效，请重新登录' },
  E096: { code: 'E096', message: '服务器内部错误' },
  E097: { code: 'E097', message: '资源不存在' },
  E098: { code: 'E098', message: '资源冲突' },
} as const;

export type ErrorCode = keyof typeof AUTH_ERROR_CODES;

// 根据错误码获取错误信息
export function getErrorMessage(code: string): string {
  const error = AUTH_ERROR_CODES[code as ErrorCode];
  return error?.message || '未知错误';
}

// 判断是否需要刷新 Token
export function isTokenExpiredError(code: string): boolean {
  return code === 'E094';
}

// 判断是否需要重新登录
export function isAuthError(code: string): boolean {
  return ['E093', 'E094', 'E095'].includes(code);
}

// 从 axios 错误中提取错误消息
export function extractErrorMessage(error: any, defaultMessage: string = '请求失败，请重试'): string {
  // 优先从 response.data 中获取后端返回的消息
  if (error?.response?.data) {
    const data = error.response.data;
    if (data.message) {
      return data.message;
    }
    if (data.error?.code) {
      return getErrorMessage(data.error.code);
    }
  }
  // 其次检查是否是业务错误
  if (error?.info?.errorMessage) {
    return error.info.errorMessage;
  }
  // 最后返回默认消息
  return defaultMessage;
}

// 获取 API 请求的 language 参数
// 中文不发送（后端默认中文），其他语言发送 'en'
export function getApiLanguage(locale: string): string | undefined {
  if (locale === 'zh-CN') {
    return undefined; // 中文不发送
  }
  return 'en'; // 其他语言都发 'en'
}
