import { cartApi } from "@api/cart";
import { useUserStore } from "@/stores/user";
import { enqueueSnackbar } from "notistack";
import { useEffect } from "react";
import { useNavigate, useSearchParams, useLocation } from "react-router-dom";
import { calcTimeOfReadyPayCart, cancelPayCartProcess, startPayCartProcess, useNotEnoughMoneyAmount } from "@/stores/notEnoughMoneyAmount";
import { startCC } from "@/stores/cc";
import { setEditQuizId, setCurrentStep } from "@root/quizes/actions";

/*
Есть три пути по которому мы ходили из квиза в хаб. Нам нехватило денег при:
1)Покупке обычного тарифа
2)Покупке тарифа-заказ-квиза
3)Покупке тарифа в настройке квиза в вкладке ИИ
*/

export const useAfterPay = () => {
  const navigate = useNavigate();
  const [searchParams, setSearchParams] = useSearchParams();
  const location = useLocation();

  const userId = useUserStore(store => store.userId)
  const userAccount = useUserStore(state => state.userAccount);
  const userWithWallet = useUserStore((state) => state.customerAccount); //c wallet
  const siteReadyPayCart = useNotEnoughMoneyAmount(state => state.siteReadyPayCart);

  let URLaction = searchParams.get("action");//что мы, собсна, хотим: оплатить, пополнить, заказать квиз
  let URLuserId = searchParams.get("userid");//тот кто начал всё это действо
  let URLadditionalinformation = searchParams.get("additionalinformation");//его токен

  useEffect(() => {
    // Проверяем, открыта ли модалка восстановления пароля
    const isRecoverPasswordModal = location.state?.backgroundLocation?.pathname === "/changepwd";
    
    // Проверяем, есть ли токен восстановления пароля в URL
    const hasAuthToken = searchParams.get("auth") || window.location.search.includes("auth=");
    
    console.log("useAfterPay debug:", {
      pathname: location.pathname,
      backgroundLocation: location.state?.backgroundLocation,
      isRecoverPasswordModal,
      searchParams: window.location.search,
      authToken: searchParams.get("auth"),
      hasAuthToken
    });
    
    // НЕ очищаем параметры на странице восстановления пароля, когда открыты модалки или есть токен auth
    if (location.pathname !== "/changepwd" && !location.state?.backgroundLocation && !isRecoverPasswordModal && !hasAuthToken) {
      console.log("Очищаем параметры URL");
      setSearchParams({}, { replace: true });
    } else {
      console.log("НЕ очищаем параметры URL");
    }

    if (userId && URLuserId && userId === URLuserId) {

      if (URLaction === "buy") startPayCartProcess(URLuserId);

      if (URLaction === "createquizcc") {
        startCC();
        (async () => {

          //Проверяем можем ли мы оплатить корзину здесь и сейчас
          const [, payCartError] = await cartApi.pay();

          if (payCartError) {
            //Не получилось купить корзину. Ставим флаг, что сайт в состоянии ожидания пополнения счёта для оплаты
            startPayCartProcess(URLuserId);
          } else {
            navigate("/tariffs");
            cancelPayCartProcess();
          }
        })()
      }


      //Покупка ИИ тарифа из настройки квиза ИИ вкладки
      if (URLaction === "buy" && URLadditionalinformation) {
        const quizId = Number(URLadditionalinformation);
        
        if (quizId) {
          setEditQuizId(Number(quizId)); //Выбираем квиз
          setCurrentStep(17); // Шаг для персонализации AI
          
          // Проверяем wayback параметр для определения куда переходить
          const wayback = searchParams.get("wayback");
          if (wayback === "edit") {
            // Сначала переходим на /edit, затем на /personalization-ai
            navigate("/edit");
            // Используем setTimeout чтобы дать время для загрузки /edit
            setTimeout(() => {
              navigate("/personalization-ai");
            }, 100);
          } else {
            // Прямой переход на /personalization-ai
            navigate("/personalization-ai");
          }
        }
      }

    }
  }, [location.pathname, location.state?.backgroundLocation]);

  //Обработка необходимости купить после пополнения
  useEffect(() => {
    if (userId !== null && siteReadyPayCart !== null && siteReadyPayCart[userId] !== undefined) {
      const deadline = siteReadyPayCart[userId];
      if (calcTimeOfReadyPayCart(deadline)) {

        //Время ещё не вышло. У нас стоит флаг покупать корзину если время не вышло.
        (async () => {
          const [, payCartError] = await cartApi.pay();

          if (!payCartError) {
            enqueueSnackbar("Товары успешно приобретены");
            cancelPayCartProcess();
          }
        })()
      }
    }
  }, [userAccount, userId, siteReadyPayCart, userWithWallet])


}