/**
 * Auth 模块类型定义。
 *
 * 仅包含注册/登录相关数据契约，认证上下文与权限类型见
 * `@/shared/types/permissions`（AuthContext）与 `@/shared/lib/session`
 * （AppSession）。
 * 纯类型文件，无副作用，可被客户端组件 import。
 */

/** 注册结果（成功时仅返回 userId，避免泄漏额外信息） */
export interface RegisterResult {
  userId: string
}

/** 注册输入参数（已通过 Zod 校验） */
export interface RegisterInput {
  name: string
  email: string
  password: string
  birthDate: string | null
  age: number | null
  isMinor: boolean
  guardianName: string
  guardianPhone: string
  guardianRelation: string
  /**
   * 注册后分配的角色（audit-P2-3 新增）。
   *
   * - 邀请码注册：使用邀请码中的 role（覆盖默认 student）
   * - 开放注册：留空，由 createUser 使用 DEFAULT_REGISTER_ROLE（student）
   */
  role?: string
  /**
   * 邀请码注册时自动加入的班级 ID（audit-P2-3 新增）。
   *
   * 来自邀请码，注册成功后可触发班级加入逻辑。
   * 当前仅透传，未在 createUser 中自动加入班级（避免引入 classes 模块依赖）。
   */
  classId?: string
}

/** 邮箱可用性查询结果 */
export interface EmailAvailabilityResult {
  available: boolean
}

/**
 * 注册错误码枚举（前端通过 t(`register.errors.${errorCode}`) 查 i18n 翻译）。
 *
 * 定义在 types.ts（而非 actions.ts）以便客户端组件直接导入，
 * 避免 "use server" 文件导出非 async 值（Next.js 16 规则）。
 */
export const REGISTER_ERROR_CODES = {
  RATE_LIMIT_EXCEEDED: "RATE_LIMIT_EXCEEDED",
  VALIDATION_FAILED: "VALIDATION_FAILED",
  EMAIL_TAKEN: "EMAIL_TAKEN",
  BREACHED_PASSWORD: "BREACHED_PASSWORD",
  INVITATION_CODE_INVALID: "INVITATION_CODE_INVALID",
  INVITATION_CODE_USED: "INVITATION_CODE_USED",
  DEFAULT_ROLE_MISSING: "DEFAULT_ROLE_MISSING",
  UNKNOWN: "UNKNOWN",
} as const

export type RegisterErrorCode = (typeof REGISTER_ERROR_CODES)[keyof typeof REGISTER_ERROR_CODES]
