/**
 * Zod request schemas for auth-2fa routes.
 * `require-zod-validation-in-routes` requires request bodies to be validated
 * by one of these schemas.
 */
import { z } from 'zod'

export const verify2FASchema = z.object({
  session_token: z.string().min(1),
  firebase_id_token: z.string().min(1),
  trust_device: z.boolean().optional().default(false),
})

export const backupCodeSchema = z.object({
  session_token: z.string().min(1),
  backup_code: z.string().min(1),
  trust_device: z.boolean().optional().default(false),
})

export const enrollVerifySchema = z.object({
  firebase_id_token: z.string().min(1),
  /** Present when coming from a pending_2fa_setup forced flow. */
  session_token: z.string().optional(),
})

export const enrollStartSchema = z.object({
  session_token: z.string().min(1).optional(),
})

export const regenerateBackupCodesSchema = z.object({
  current_otp: z.string().min(1),
})

export const delete2FASchema = z.object({
  current_otp: z.string().min(1),
})

export const securitySettingsSchema = z.object({
  enforce_2fa: z.boolean().optional(),
  disable_2fa_remember_device: z.boolean().optional(),
})

export type Verify2FABody = z.infer<typeof verify2FASchema>
export type BackupCodeBody = z.infer<typeof backupCodeSchema>
export type EnrollVerifyBody = z.infer<typeof enrollVerifySchema>
export type RegenerateBackupCodesBody = z.infer<typeof regenerateBackupCodesSchema>
export type Delete2FABody = z.infer<typeof delete2FASchema>
export type SecuritySettingsBody = z.infer<typeof securitySettingsSchema>
