'use client';

import { AdminFormShell } from '@/components/admin/form-shell';
import { TextField, TextAreaField, CheckboxField, FieldsetLocale } from '@/components/admin/fields';
import type { Locale } from '@/i18n/config';

interface TestimonialFormValues {
  id?: string;
  authorName?: string;
  authorRole?: string;
  companyName?: string;
  published?: boolean;
  fr?: { quote: string };
  ar?: { quote: string };
}

export function TestimonialForm({ locale, initial }: { locale: Locale; initial?: TestimonialFormValues }) {
  const isEdit = Boolean(initial?.id);

  return (
    <AdminFormShell
      action={isEdit ? `/api/admin/testimonials/${initial!.id}` : '/api/admin/testimonials'}
      method={isEdit ? 'PATCH' : 'POST'}
      redirectTo={`/${locale}/admin/testimonials`}
      submitLabel={isEdit ? 'Enregistrer' : 'Ajouter le témoignage'}
      buildPayload={(form) => ({
        authorName: form.get('authorName'),
        authorRole: form.get('authorRole') || undefined,
        companyName: form.get('companyName') || undefined,
        published: form.get('published') === 'on',
        translations: {
          fr: { quote: form.get('quote_fr') },
          ar: { quote: form.get('quote_ar') }
        }
      })}
    >
      <div className="grid gap-4 sm:grid-cols-3">
        <TextField name="authorName" label="Nom de l'auteur" required defaultValue={initial?.authorName} />
        <TextField name="authorRole" label="Fonction" defaultValue={initial?.authorRole} />
        <TextField name="companyName" label="Entreprise" defaultValue={initial?.companyName} />
      </div>
      <CheckboxField name="published" label="Publié" defaultChecked={initial?.published ?? false} />

      <FieldsetLocale locale="fr">
        <TextAreaField name="quote_fr" label="Citation" required defaultValue={initial?.fr?.quote} />
      </FieldsetLocale>
      <FieldsetLocale locale="ar">
        <TextAreaField name="quote_ar" label="الاقتباس" required defaultValue={initial?.ar?.quote} />
      </FieldsetLocale>
    </AdminFormShell>
  );
}
