/// API 错误码常量
///
/// 集中管理后端业务错误码，避免散落在各处硬编码。
/// 按业务域分组，命名风格对齐后端定义。
///
/// 使用方式：
/// ```dart
/// ApiConfig(
///   tokenExpiredCodes: ApiErrorCodes.tokenExpiredCodes,
///   forceLogoutCodes: ApiErrorCodes.forceLogoutCodes,
/// )
/// ```
class ApiErrorCodes {
  ApiErrorCodes._();

  // ── 认证（30001-30009）──

  /// Token 无效
  static const int tokenInvalid = 30002;

  /// JWT 无效
  static const int jwtInvalid = 30003;

  /// 签名方法错误
  static const int signingMethodError = 30008;

  /// 密钥解析失败
  static const int parsingKeyError = 30009;

  /// Session 无效
  static const int sessionInvalid = 30124;

  /// Refresh Token 失效
  static const int refreshTokenFailed = 30125;

  /// 账号在其他设备登录
  static const int loggedInAnotherDevice = 30006;

  // ── 错误码集合 ──

  /// Token 过期错误码集合 — 触发自动刷新 Token
  static const Set<int> tokenExpiredCodes = {
    tokenInvalid,
    jwtInvalid,
    sessionInvalid,
  };

  /// 强制登出错误码集合 — 触发退出登录流程
  static const Set<int> forceLogoutCodes = {refreshTokenFailed};

  /// 踢下线错误码集合 — 触发踢下线 UI 提示
  static const Set<int> kickOffCodes = {
    loggedInAnotherDevice,
    signingMethodError,
    parsingKeyError,
  };
}
