"use client";

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

/**
 * Интерфейс для Unleash impression события
 * Идентично типу в aura-webapp
 */
interface UnleashImpressionEvent {
  enabled: boolean;
  featureName: string;
  variant: string;
  context: {
    appName?: string;
  };
}

/**
 * Хук для автоматической отправки AB test impression событий в Google Analytics
 * 
 * Реализация ИДЕНТИЧНА aura-webapp:
 * - Подписывается на impression события от Unleash Client
 * - Impression event генерируется АВТОМАТИЧЕСКИ при вызове useVariant()
 * - Это происходит когда пользователь РЕАЛЬНО доходит до экрана с AB тестом
 * 
 * @see /aura-webapp/src/hooks/ab/unleash/useUnleash.ts (строки 112-126)
 */
export function useUnleashAnalytics() {
  const unleashClient = useUnleashClient();

  useEffect(() => {
    console.log("🎯 [Unleash Analytics] Impression listener initialized");
    
    // Сохраняем ссылку на handler для корректной отписки
    const impressionHandler = (impressionEvent: UnleashImpressionEvent) => {
      console.log("📊 [Unleash Analytics] Impression event received:", {
        feature: impressionEvent.featureName,
        variant: impressionEvent.variant,
        enabled: impressionEvent.enabled,
      });
      
      // Проверяем что флаг включен (идентично aura-webapp)
      if ("enabled" in impressionEvent && impressionEvent.enabled) {
        const isDevelopEnvironment = typeof window !== "undefined" && 
          (window.location.hostname.includes('develop.funnel.witlab.us') ||
          window.location.hostname.includes('localhost'));
        
        // ✅ 1. Отправляем в Google Analytics
        const gaAvailable = typeof window !== "undefined" && typeof window.gtag !== "undefined";
        if (gaAvailable) {
          window.gtag("event", "experiment_impression", {
            app_name: impressionEvent.context.appName || "witlab-funnel",
            feature: impressionEvent.featureName,
            treatment: impressionEvent.variant,
            debug_mode: isDevelopEnvironment,
          });
          console.log("✅ [Google Analytics] AB test event sent:", {
            event: "experiment_impression",
            feature: impressionEvent.featureName,
            treatment: impressionEvent.variant,
            debug_mode: isDevelopEnvironment,
          });
        } else {
          console.warn("⚠️ [Google Analytics] Not available - gtag function not found");
        }

        // ✅ 2. Отправляем в Яндекс Метрику через params (параметры ВИЗИТА)
        // ВАЖНО: AB тесты - это параметры ВИЗИТА (params), а не посетителя (userParams)
        // Идентично aura-webapp: используем прямой вызов window.ym()
        const ymAvailable = typeof window !== "undefined" && typeof window.ym !== "undefined";
        const counterId = typeof window !== "undefined" ? window.__YM_COUNTER_ID__ : undefined;
        
        if (ymAvailable && counterId) {
          // Отправляем параметры визита для AB теста
          // ym() накопит вызов в очереди если скрипт еще не загрузился
          window.ym(counterId, 'params', {
            [`ab_test_${impressionEvent.featureName}`]: impressionEvent.variant,
          });
          console.log("✅ [Yandex Metrika] AB test params sent:", {
            counterId,
            param: `ab_test_${impressionEvent.featureName}`,
            value: impressionEvent.variant,
            queued: !!window.ym.a, // true если событие в очереди, false если отправлено
          });
        } else if (!ymAvailable) {
          console.warn("⚠️ [Yandex Metrika] Not initialized - check MetricsProvider");
        } else if (!counterId) {
          console.warn("⚠️ [Yandex Metrika] Counter ID not set");
        }

        // Summary log
        console.log("📈 [Unleash Analytics] AB Test Impression Summary:", {
          feature: impressionEvent.featureName,
          variant: impressionEvent.variant,
          appName: impressionEvent.context.appName,
          debugMode: isDevelopEnvironment,
          sentToGA: gaAvailable,
          sentToYM: ymAvailable && !!window.__YM_COUNTER_ID__,
        });
      } else {
        console.log("⏭️ [Unleash Analytics] Impression event skipped - flag not enabled");
      }
    };

    // Подписываемся на все impression события от Unleash
    unleashClient.on("impression", impressionHandler);

    // Отписываемся при unmount, передавая ту же ссылку на handler
    return () => {
      console.log("🔌 [Unleash Analytics] Impression listener removed");
      unleashClient.off("impression", impressionHandler);
    };
  }, [unleashClient]);
}
