"use client";

import { z } from "zod";
import { 
  useServerActionForm,
  EntityFormWrapper,
  ServerActionForm,
  FormActions,
  TextField,
  EmailField
} from ".";

// Example schema for a manufacturer
const manufacturerSchema = z.object({
  company_name: z.string().min(1, "Firmenname ist erforderlich"),
  address: z.string().optional(),
  email: z.string().email("Ungültige E-Mail-Adresse").optional().or(z.literal("")),
  phone_number: z.string().optional(),
});

type ManufacturerFormData = z.infer<typeof manufacturerSchema>;

// Example server action
async function saveManufacturer(data: ManufacturerFormData) {
  // This would be your actual server action
  console.log("Saving manufacturer:", data);
  
  // Simulate API call
  await new Promise(resolve => setTimeout(resolve, 1000));
  
  // Simulate random success/failure for demo
  if (Math.random() > 0.2) {
    return { success: true, message: "Hersteller erfolgreich gespeichert" };
  } else {
    return { success: false, error: "Fehler beim Speichern des Herstellers" };
  }
}

interface ExampleManufacturerFormProps {
  initialData?: Partial<ManufacturerFormData>;
  onSave?: () => void;
  onCancel?: () => void;
}

export function ExampleManufacturerForm({ 
  initialData, 
  onSave, 
  onCancel 
}: ExampleManufacturerFormProps) {
  const { form, isPending, onSubmit, handleSubmit } = useServerActionForm({
    schema: manufacturerSchema,
    defaultValues: {
      company_name: initialData?.company_name || "",
      address: initialData?.address || "",
      email: initialData?.email || "",
      phone_number: initialData?.phone_number || "",
    },
    serverAction: saveManufacturer,
    onSuccess: onSave,
    successMessage: "Hersteller erfolgreich gespeichert",
    errorMessage: "Fehler beim Speichern des Herstellers",
  });

  return (
    <EntityFormWrapper
      title={initialData ? "Hersteller bearbeiten" : "Neuer Hersteller"}
      description={
        initialData 
          ? "Aktualisieren Sie die Informationen des Herstellers."
          : "Erstellen Sie einen neuen Hersteller."
      }
    >
      <ServerActionForm
        form={form}
        isPending={isPending}
        onSubmit={onSubmit}
        handleSubmit={handleSubmit}
      >
        <TextField
          form={form}
          name="company_name"
          label="Firmenname"
          placeholder="Firmenname eingeben"
          required
        />

        <TextField
          form={form}
          name="address"
          label="Adresse"
          placeholder="Adresse eingeben"
        />

        <EmailField
          form={form}
          name="email"
          label="E-Mail"
          placeholder="E-Mail eingeben"
        />

        <TextField
          form={form}
          name="phone_number"
          label="Telefonnummer"
          placeholder="Telefonnummer eingeben"
          type="tel"
        />

        <FormActions
          isPending={isPending}
          onCancel={onCancel}
          submitLabel={initialData ? "Aktualisieren" : "Erstellen"}
          showDelete={!!initialData}
          onDelete={() => {
            if (confirm("Möchten Sie diesen Hersteller wirklich löschen?")) {
              console.log("Delete manufacturer");
              onSave?.();
            }
          }}
        />
      </ServerActionForm>
    </EntityFormWrapper>
  );
}