import { Button, PinInput, Select } from "@wrnexus/ui"

component TwoFactorChallenge {
  props {
    action = "/api/auth/mfa/complete"
    schema = "auth-mfa"
    otpAction = "/api/auth/mfa/otp"
    mfaToken = ""
    challengeId = ""
    method = "totp"
    returnTo = "/"
    title = "Two-step verification"
    description = "Choose a verification method and enter the code."
    submitLabel = "Verify"
    recoveryHref = "/recover"
    color = "primary"
    size = "md"
    class = ""
  }
  state methodOptions = [
    {"label":"Authenticator app","value":"totp"},
    {"label":"Recovery code","value":"recovery-code"},
    {"label":"Email code","value":"email-otp"},
    {"label":"SMS code","value":"sms-otp"}
  ]
  view {
    <section
      {...attrs}
      data-wrnexus-runtime="auth"
      data-auth-mfa-challenge
      data-mfa-otp-action='{otpAction}'
      data-mfa-initial-method='{method}'
      class='w-full max-w-md rounded-[var(--wire-radius-lg)] border border-[var(--wire-color-border)] bg-[var(--wire-color-surface)] p-6 text-[var(--wire-color-text)] shadow-[var(--wire-shadow-2)] {class}'
    >
      <div class="mb-5 flex size-11 items-center justify-center rounded-full bg-[color-mix(in_srgb,var(--wire-color-primary)_12%,transparent)] text-[var(--wire-color-primary)]"><span class="icon-[lucide--shield-check] size-5"></span></div>
      <h1 class="m-0 text-2xl font-semibold">{title}</h1>
      <p class="mt-2 text-sm text-[var(--wire-color-muted)]">{description}</p>
      <form method="post" action='{action}' data-schema='{schema}' data-auth-mfa-form novalidate class="mt-6 space-y-4">
        <input type="hidden" name="mfaToken" value='{mfaToken}' />
        <input type="hidden" name="challengeId" value='{challengeId}' />
        <input type="hidden" name="returnTo" value='{returnTo}' />
        <Select id="auth-mfa-method" name="method" data-auth-mfa-method label="Verification method" value="{method}" options="{methodOptions}" color="{color}" size="{size}" />
        <PinInput label="Verification code" name="code" length="6" inputMode="numeric" autocomplete="one-time-code" color="{color}" size="{size}" />
        <p data-auth-mfa-status role="status" hidden class="m-0 rounded-[var(--wire-radius-sm)] bg-[color-mix(in_srgb,var(--wire-color-primary)_10%,transparent)] p-3 text-sm text-[var(--wire-color-primary)]"></p>
        <p data-error="mfaToken" class="m-0 min-h-4 text-xs text-[var(--wire-color-danger)]"></p>
        <p data-error="challengeId" class="m-0 min-h-4 text-xs text-[var(--wire-color-danger)]"></p>
        <p data-error="_form" role="alert" class="m-0 hidden rounded-[var(--wire-radius-sm)] bg-[color-mix(in_srgb,var(--wire-color-danger)_10%,transparent)] p-3 text-sm text-[var(--wire-color-danger)]"></p>
        <Button type="submit" label="{submitLabel}" variant="solid" color="{color}" size="{size}" fullWidth="true" />
      </form>
      <a href='{recoveryHref}' class="mt-4 inline-flex text-sm text-[var(--wire-color-primary)] hover:underline">Account recovery options</a>
    </section>
  }
}
