// Rôle : centralise les petits formulaires contrôlés avec brouillon local.
// Fournit helpers de champs, submit preventDefault, reset et erreur inline retournée par le submit métier.
// À utiliser quand plusieurs champs sont simplement saisis puis nettoyés au submit.
import { useState } from "react";

export function useDraftForm(initialValues) {
  const [values, setValues] = useState(initialValues);
  const [error, setError] = useState("");

  function setField(name, value) {
    setError("");
    setValues((current) => ({ ...current, [name]: value }));
  }

  function updateValues(patch) {
    setError("");
    setValues((current) => ({ ...current, ...patch }));
  }

  function reset(nextValues = initialValues) {
    setError("");
    setValues(nextValues);
  }

  function clearError() {
    setError("");
  }

  function getFieldProps(name, props = {}) {
    return {
      ...props,
      name: props.name || name,
      value: values[name] ?? "",
      onChange: (event) => {
        setField(name, event.target.value);
        props.onChange?.(event);
      }
    };
  }

  function handleSubmit(event, onSubmit) {
    event.preventDefault();
    const result = onSubmit(values, { reset, setField, setValues, updateValues, setError, clearError });
    if (typeof result === "string") setError(result);
    else setError("");
  }

  return {
    values,
    error,
    setField,
    setValues,
    setError,
    clearError,
    updateValues,
    reset,
    getFieldProps,
    handleSubmit
  };
}
