import { clearAuthToken, getAuthToken, setAuthToken } from '@frontend/kitui';
import { logout } from '@root/api/auth';
import { setNotEnoughMoneyAmount } from '@root/stores/allTypesOfPurchases';
import { clearCustomTariffs } from '@root/stores/customTariffs';
import { clearTickets } from '@root/stores/tickets';
import { clearUserData, setUserId, useUserStore } from '@root/stores/user';
import { useEffect, useState } from 'react';
import { useLocation, useNavigate } from 'react-router-dom';
import { clearUserSession, logoutAndRedirect } from "@root/utils/logout";

interface QuizAuthParams {
  action?: string;
  dif?: string;
  data?: string;
  userid?: string;
  wayback?: string;
}

export const useReauthorization = () => {
    const userId = useUserStore(store => store.userId);
    const user = useUserStore(store => store.user);
    const { search } = useLocation();
    const navigate = useNavigate();
    const [isProcessing, setIsProcessing] = useState(false);

    useEffect(() => {
        // Этот эффект сработает при каждом изменении query-параметров
        const params = new URLSearchParams(search);

        // Обработка старых параметров (userid, sec)
        const URLuserId = params.get('userid');
        const URLtoken = params.get('sec');

        // Обработка новых параметров авторизации
        const quizParams: QuizAuthParams = {
            action: params.get("action") || undefined,
            dif: params.get("dif") || undefined,
            data: params.get("data") || undefined,
            userid: params.get("userid") || undefined,
            wayback: params.get("wayback") || undefined,
        };

        const { action, dif, data: token, userid: quizUserId, wayback } = quizParams;

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

            // Если уже обрабатываем авторизацию, не запускаем повторно
            if (isProcessing) {
                return;
            }

            setIsProcessing(true);

            const processQuizAuth = async () => {
                try {
                    // Если есть текущий токен, очищаем данные
                    if (getAuthToken()) {
                        logoutAndRedirect(navigate);
                        await logout();
                    }

                    // Устанавливаем новый токен и ID пользователя
                    setAuthToken(token);
                    setUserId(quizUserId);
                } catch (error) {
                    console.error("Ошибка авторизации:", error);
                    
                    // Перенаправляем на внешний сайт в случае ошибки
                    const link = document.createElement("a");
                    link.href = "https://quiz.pena.digital/tariffs";
                    document.body.appendChild(link);
                    link.click();
                } finally {
                    setIsProcessing(false);
                }
            };

            processQuizAuth();
            return;
        }

        // Обработка старых параметров (userid, sec)
        if (URLuserId !== userId && URLtoken) {
            // Если есть токен в URL, устанавливаем его
            // Очищаем данные только если токен действительно изменился
            if (getAuthToken() !== URLtoken) {
                clearUserSession();
                // Не вызываем logout() чтобы избежать перенаправления
            }
            setAuthToken(URLtoken);
        }
    }, [search, userId, user?._id, navigate, isProcessing]);

    return {
        isProcessing,
    };
};