import { useEffect, useState } from "react";
import { useNavigate, useSearchParams } from "react-router-dom";
import {
  clearAuthToken,
  getMessageFromFetchError,
  setAuthToken,
  getAuthToken,
} from "@frontend/kitui";
import {
  clearUserData,
  setUser,
  setUserAccount,
  setUserId,
  useUserStore,
} from "@root/stores/user";
import { logout } from "@root/api/auth";
import { clearCustomTariffs } from "@root/stores/customTariffs";
import { clearTickets } from "@root/stores/tickets";
import { setNotEnoughMoneyAmount } from "@stores/cart";

export const useAuthRedirect = () => {
  const navigate = useNavigate();
  const [searchParams] = useSearchParams();
  const [isProcessing, setIsProcessing] = useState(false);
  const user = useUserStore((state) => state.user);

  const action = searchParams.get("action");
  const dif = searchParams.get("dif");
  const token = searchParams.get("data");
  const userId = searchParams.get("userid");
  const wayback = searchParams.get("wayback");

  useEffect(() => {
    if (isProcessing) return;

    // Если пользователь уже авторизован и это тот же пользователь
    if (user?._id === userId) {
      let returnUrl = `/payment?action=${action}&dif=${dif}&user=${userId}`;
      if (wayback) returnUrl += `&wayback=${wayback}`;
      navigate(returnUrl, { replace: true });
      return;
    }

    // Если есть все необходимые параметры для авторизации
    if (action && dif && token && userId) {
      setIsProcessing(true);
      
      (async () => {
        try {
          // Очищаем старые данные если есть токен
          if (getAuthToken()) {
            clearAuthToken();
            clearUserData();
            clearCustomTariffs();
            clearTickets();
            setNotEnoughMoneyAmount(0);
            await logout();
          }

          // Устанавливаем новый токен и ID пользователя
          setAuthToken(token);
          setUserId(userId);

          // Перенаправляем на страницу оплаты
          let returnUrl = `/payment?action=${action}&dif=${dif}&user=${userId}`;
          if (wayback) returnUrl += `&wayback=${wayback}`;
          navigate(returnUrl, { replace: true });
        } catch (error) {
          console.error("Auth redirect error:", error);
          // В случае ошибки перенаправляем на главную страницу тарифов
          navigate("/tariffs", { replace: true });
        } finally {
          setIsProcessing(false);
        }
      })();
    }
  }, [user, action, dif, token, userId, wayback, navigate, isProcessing]);

  return { isProcessing };
}; 