import { useEffect, useState } from "react";
import { useToast } from "@/components/ui/use-toast";
import { trpc } from "@/app/_trpc/client";
import useFormHandler from "@/hooks/useFormHandler";
import { removeLocalOffsetFromDate } from "@/lib/utils";
import { createProjectSchema } from "@/lib/schemas/projectSchema";
import { z } from "zod";

type CustomNames={
    residence:boolean
    typeCotization:boolean
}
const useProjectForm = () => {
  const defaultValues: z.infer<typeof createProjectSchema> = {
    name: "",
    costPerMeter: 0,
    startDate: new Date(),
    estimatedEndDate: undefined,
    laborCost: 0,
    typeCotization: "metro",
    residence: "apartamento",
  };
  const [isCustomNames,setIsCustomNames]=useState<CustomNames>({
    residence:false,
    typeCotization:false
  })
  function resetCustonName(key:keyof CustomNames){
    setIsCustomNames((prev) => ({ ...prev, [key]: false }));
    form.resetField(key)
  }


  const utils = trpc.useUtils();
  const { form, isInputChanged } = useFormHandler(createProjectSchema, defaultValues);

  const { toast } = useToast();
  const [open, setOpen] = useState<boolean>(false);

  const { mutate: createProjectMutation, isPending } =
    trpc.projects.createProject.useMutation({
      onSuccess: () => {
        toast({ title: "Éxito!", description: "Proyecto creado con éxito" });
        utils.projects.getProjects.invalidate();
        setOpen(false);
      },
      onError: (err) => {
        console.log('err',err)
        toast({ title: "Error!", description: "Error al crear proyecto", variant: "destructive" });
      },
    });

  const onSubmit = (values: z.infer<typeof createProjectSchema>) => {
    createProjectMutation(values);
  };


  const residenceFormValue = form.watch('residence')
  const typeCotizationVale = form.watch('typeCotization')

  useEffect(()=>{
    if(residenceFormValue.toLocaleLowerCase() === 'otro'){
        setIsCustomNames({...isCustomNames,residence:true})
        form.setValue('residence','')
    }
    if(typeCotizationVale.toLocaleLowerCase() === 'otro'){
        setIsCustomNames({...isCustomNames,typeCotization:true})
        form.setValue('typeCotization','')
    }
  },[residenceFormValue,typeCotizationVale])

 
  return {
    form,
    isInputChanged,
    open,
    setOpen,
    onSubmit,
    isPending,
    isCustomNames,
    resetCustonName
  };
};

export default useProjectForm;
