import { useStore } from "@/store";
import { sendData, sendDataResponseText } from "@/utils/actions";
import { telSchema, TtelSchema } from "@/utils/form-schemas";
import { timeOut } from "@/utils/helpers";
import { zodResolver } from "@hookform/resolvers/zod";
import { useState } from "react";
import { SubmitHandler, useForm } from "react-hook-form";

export const usePhoneForm = () => {
  const { setModal, phone, plan, setUserData } = useStore();
  const {
    register,
    handleSubmit,
    formState: { errors },
    setValue,
    reset,
  } = useForm<TtelSchema>({
    defaultValues: {
      telefono: phone || "",
    },
    resolver: zodResolver(telSchema),
  });
  const [isSendingForm, setIsSendingForm] = useState(false);
  const [formError, setFormError] = useState<string | undefined>("");
  const onSubmit: SubmitHandler<TtelSchema> = async (data) => {
    formError && setFormError("");
    setIsSendingForm(true);
    setUserData({ phone: data.telefono });
    await timeOut(1000);
    const d = { ...data, productId: plan.productId };
    const res = await sendDataResponseText(
      "getjs",
      {
        ...d,
        btnselector: ".btnSubscribe",
      },
      "TOKEN"
    );
    console.log({ ...res, info_enviada: d });
    if (res && res?.response) {
      /* if (res.script) createScript(res.script); */
      setUserData({ token: res?.response });
      const user = await sendData(
        "whotime",
        {
          productId: plan.productId,
          token: res?.response,
          userAgent: navigator.userAgent,
        },
        true
      );

      if (user?.status) setModal("planForm");
      else {
        const pin = await sendDataResponseText("getpin", d, "SHORTCODE");
        if (pin?.error) setFormError(pin.error);
        else {
          console.log({ ...pin, info_enviada: d });
          setModal("pin");
          reset();
        }
      }
    } else setFormError(res?.error);
    setIsSendingForm(false);
  };
  return {
    register,
    handleSubmit,
    errors,
    setValue,
    isSendingForm,
    onSubmit,
    formError,
  };
};
