/**
 * 邀请码 Zod 验证 schema（audit-P2-3 新增）
 */

import { z } from "zod"

import type { InvitationRole } from "./types"

/** 邀请码角色枚举（与 types.ts InvitationRole 同步） */
export const INVITATION_ROLE_VALUES = [
  "student",
  "teacher",
  "parent",
  "admin",
] as const satisfies readonly InvitationRole[]

/** 批量生成邀请码 schema */
export const GenerateInvitationCodesSchema = z.object({
  /** 生成数量：1-100 */
  count: z.coerce.number().int().min(1).max(100),
  role: z.enum(INVITATION_ROLE_VALUES),
  /** 可选：限定邮箱 */
  email: z.string().email().or(z.literal("")).optional(),
  /** 可选：班级 ID */
  classId: z.string().max(128).or(z.literal("")).optional(),
  /** 可选：过期时间（ISO 字符串） */
  expiresAt: z.string().datetime().or(z.literal("")).optional(),
  /** 可选：备注 */
  notes: z.string().max(500).or(z.literal("")).optional(),
})

export type GenerateInvitationCodesSchemaType = z.infer<
  typeof GenerateInvitationCodesSchema
>

/** 注册时校验邀请码 schema（嵌入 RegisterSchema） */
export const InvitationCodeFieldSchema = z
  .string()
  .trim()
  .toUpperCase()
  .min(8, "Invitation code must be at least 8 characters")
  .max(64, "Invitation code too long")
  .regex(
    /^[A-Z0-9]+$/,
    "Invitation code can only contain uppercase letters and numbers",
  )
