"use client";

import { useEffect } from "react";
import { useVariant } from "@unleash/proxy-client-react";

/**
 * Hook для загрузки AB тестов только для текущего экрана
 * Отправляет impression в GA только когда пользователь видит экран
 * 
 * @param flags - массив флагов которые используются на текущем экране
 */
export function useScreenUnleash(flags: string[]) {
  // Получаем варианты только для флагов текущего экрана
  const variants = flags.map(flag => {
    // eslint-disable-next-line react-hooks/rules-of-hooks
    const variant = useVariant(flag);
    return {
      flag,
      variant: variant?.name,
    };
  });

  // Отправляем impression события в GA когда экран рендерится
  useEffect(() => {
    // Проверяем что GA доступен
    if (typeof window === "undefined" || !window.gtag) {
      return;
    }

    // Отправляем события для каждого флага на этом экране
    variants.forEach(({ flag, variant }) => {
      if (variant && variant !== "disabled") {
        // Проверяем не отправляли ли уже это событие в этой сессии
        const storageKey = `unleash_impression_${flag}_${variant}`;
        const alreadySent = sessionStorage.getItem(storageKey);

        if (!alreadySent) {
          // Отправляем в Google Analytics
          window.gtag("event", "experiment_impression", {
            app_name: "witlab-funnel",
            feature: flag,
            treatment: variant,
          });

          // Помечаем что отправили (сохраняется до закрытия вкладки)
          sessionStorage.setItem(storageKey, "true");

          // Debug в development
          if (process.env.NODE_ENV === "development") {
            console.log("[Screen Unleash Analytics]", {
              screen: "current",
              feature: flag,
              variant: variant,
            });
          }
        }
      }
    });
  }, [variants]);

  // Возвращаем мапу активных вариантов для удобства
  const activeVariants: Record<string, string> = {};
  variants.forEach(({ flag, variant }) => {
    if (variant && variant !== "disabled") {
      activeVariants[flag] = variant;
    }
  });

  return activeVariants;
}
