import type { Schema } from "yup";
import type { FormSubmitEvent } from '#ui/types'

export const useFormValidation = <T extends Record<string, any>>(
  yupSchema: Schema<T>,
  onSubmitCallback: (values: T) => Promise<void> | void,
) => {
  // 1. Configurar el formulario con el esquema tipado
  const {
    setValues,
    handleSubmit,
    errors,
    isSubmitting,
    resetForm,
    defineField,
  } = useForm<T>({
    validationSchema: toTypedSchema(yupSchema),
  });

  // 2. Manejador de envío estandarizado

  /*const submit = handleSubmit(async (values) => {
    try {
      console.log('DATA', values)
      await onSubmitCallback(values);
    } catch (error) {
      console.error("Error en el envío:", error);
    }
  });*/

  const submit = (event: FormSubmitEvent<T>) => {
    handleSubmit(async (values) => {
      try {
        await onSubmitCallback(values);
      } catch (error) {
        console.error("Error en el envío:", error);
      }
    })(event);
  };


  return {
    setValues,
    submit,
    errors,
    isSubmitting,
    resetForm,
    defineField,
  };
};
