'use client';

import { useRouter } from 'next/navigation';
import { useState } from 'react';
import Swal from 'sweetalert2';
import { RequireRole } from '@/lib/auth-context';
import { createPatient } from '@/lib/services/patients';
import PatientForm, {
  PatientFormValues,
} from '@/components/app/PatientForm';
import { BackLink, PageHeader } from '@/components/app/ui';
import { extractApiError } from '@/lib/api-client';
import type { Gender } from '@/lib/types';

export default function NovoPacientePage() {
  return (
    <RequireRole roles={['admin', 'receptionist', 'dentist']}>
      <NovoPaciente />
    </RequireRole>
  );
}

function NovoPaciente() {
  const router = useRouter();
  const [submitting, setSubmitting] = useState(false);

  async function handleSubmit(values: PatientFormValues) {
    setSubmitting(true);
    try {
      const created = await createPatient({
        fullName: values.fullName,
        cpf: values.cpf || null,
        birthDate: values.birthDate || null,
        gender: (values.gender as Gender) || null,
        email: values.email || null,
        phone: values.phone || null,
        zipCode: values.zipCode || null,
        street: values.street || null,
        number: values.number || null,
        complement: values.complement || null,
        district: values.district || null,
        city: values.city || null,
        state: values.state || null,
        notes: values.notes || null,
        isActive: values.isActive,
      });
      await Swal.fire({
        icon: 'success',
        title: 'Paciente cadastrado',
        timer: 1300,
        showConfirmButton: false,
      });
      router.push(`/painel/pacientes/${created.id}`);
    } catch (err) {
      Swal.fire({ icon: 'error', title: 'Erro', text: extractApiError(err) });
    } finally {
      setSubmitting(false);
    }
  }

  return (
    <>
      <BackLink href="/painel/pacientes" label="Voltar para pacientes" />
      <PageHeader title="Novo paciente" subtitle="Cadastrar novo paciente" />
      <PatientForm
        submitting={submitting}
        onSubmit={handleSubmit}
        onCancel={() => router.push('/painel/pacientes')}
      />
    </>
  );
}
