import useSWR from "swr";
import { getAndParceData } from "./quizRelase";
import { useEffect, useState } from "react";
import { initDataManager, statusOfQuiz } from "@/utils/hooks/useQuestionFlowControl";
import { addQuestions, changeNextLoading, setQuizData, useQuizStore } from "@/stores/useQuizStore";

/*
  У хука есть три режмиа работы: "line" | "branch" | "ai"
  Для branch и line единовременно запрашиваются ВСЕ данные (пока что это количество на 100 штук. Позже нужно впилить доп запросы чтобы получить все вопросы.)
  Для ai идёт последовательный запрос данных. При первом попадании на result - блокируется возможность запрашивать новые данные
*/

export function useQuizData(quizId: string, preview: boolean = false) {
  const { quizStep, questions } = useQuizStore();

  const [page, setPage] = useState(0);
  const [needFullLoad, setNeedFullLoad] = useState(false);

  useEffect(() => {
    if (quizStep > page) setPage(quizStep);
  }, [quizStep]);

  return useSWR(
    preview ? null : ["quizData", quizId, page, needFullLoad],
    async ([, id, currentPage, fullLoad]) => {
      // Первый запрос - получаем статус
      if (currentPage === 0 && !fullLoad) {
        const firstData = await getAndParceData({
          quizId: id,
          limit: 1,
          page: currentPage,
          needConfig: true,
        });
        //firstData.settings.status = "ai";

        initDataManager({
          status: firstData.settings.status,
          haveRoot: firstData.settings.cfg.haveRoot,
        });
        setQuizData(firstData);

        if (!["ai"].includes(firstData.settings.status)) {
          setNeedFullLoad(true); // Триггерит новый запрос через изменение ключа
          return firstData;
        }
        return firstData;
      }

      // Полная загрузка для line/branch
      if (fullLoad) {
        const data = await getAndParceData({
          quizId: id,
          limit: 100,
          page: 0,
          needConfig: false,
        });

        addQuestions(data.questions.slice(1));

        // Возвращаем полную структуру данных с настройками из store
        const currentState = useQuizStore.getState();
        return {
          ...currentState,
          questions: [...currentState.questions, ...data.questions.slice(1)],
        };
      }

      if (currentPage >= questions.length) {
        try {
          // Для AI режима - последовательная загрузка
          const data = await getAndParceData({
            quizId: id,
            page: currentPage,
            limit: 1,
            needConfig: false,
          });
          addQuestions(data.questions);
          changeNextLoading(false);

          // Возвращаем полную структуру данных с настройками из store
          const currentState = useQuizStore.getState();
          return {
            ...currentState,
            questions: [...currentState.questions, ...data.questions],
          };
        } catch (p) {
          setPage(questions.length);
          changeNextLoading(false);
        }
      }
    },
    {
      revalidateOnFocus: false,
      revalidateOnReconnect: false,
      shouldRetryOnError: false,
      refreshInterval: 0,
    }
  );
}
