"use client";

import { useEffect, useState } from "react";
import LeadFormDialog from "./LeadFormDialog";
import { toast } from "sonner";
import { apiCall } from "@/utils/callApi";

export default function LeadGate() {
  const [open, setOpen] = useState(false);
  const [loading, setLoading] = useState(false);

  const [formData, setFormData] = useState({
    name: "",
    phone_number: "",
  });

  const [validationError, setValidationError] = useState<{
    phone_number: string | null;
  }>({
    phone_number: null,
  });

  useEffect(() => {
    const lead = localStorage.getItem("lead");

    if (!lead) {
      setOpen(true);
    }
  }, []);

  const checkValidation = (
    key: string,
    value: string
  ) => {
    let error: string | null = null;

    switch (key) {
      case "phone_number": {
        const phoneRegex = /^[6-9]\d{9}$/;

        if (!phoneRegex.test(value)) {
          error = "Invalid Indian phone number";
        }

        break;
      }

      default:
        error = null;
    }

    setValidationError((prev) => ({
      ...prev,
      [key]: error,
    }));

    return error;
  };

  const handleSubmit = async (
    e: React.FormEvent
  ) => {
    e.preventDefault();

    // Name validation
    if (!formData.name.trim()) {
      toast.error("Name is required");
      return;
    }

    // Phone validation
    const phoneError = checkValidation(
      "phone_number",
      formData.phone_number
    );

    if (phoneError) {
      toast.error(phoneError);
      return;
    }

    setLoading(true);

    try {
      const response = await apiCall<any>(
        "/clientapi/leadsebmit",
        {
          method: "POST",
          body: {
            name: formData.name.trim(),
            phone_number:
              formData.phone_number.trim(),
          },
        }
      );

      if (response.error) {
        toast.error(response.error);
        return;
      }

      if (response.data?.success) {
        localStorage.setItem(
          "lead",
          JSON.stringify(response.data.data)
        );

        toast.success(
          response.data.message ||
            "Lead submitted successfully"
        );

        setFormData({
          name: "",
          phone_number: "",
        });

        setOpen(false);
      } else {
        toast.error(
          response.data?.message ||
            "Failed to submit lead"
        );
      }
    } catch (error) {
      console.error(error);

      toast.error(
        "Something went wrong. Please try again."
      );
    } finally {
      setLoading(false);
    }
  };

  return (
    <LeadFormDialog
      open={open}
      onOpenChange={setOpen}
      formData={formData}
      setFormData={setFormData}
      checkValidation={checkValidation}
      validationError={validationError}
      handleSubmit={handleSubmit}
      loading={loading}
    />
  );
}