"use client";

/**
 * Отправляет impression событие в Google Analytics для AB теста
 * 
 * Используется в FunnelRuntime когда экран с AB тестом становится видимым
 * Автоматически предотвращает дубликаты через sessionStorage
 * 
 * @param flag - название флага из Unleash
 * @param variant - вариант который получил пользователь
 */
export function sendUnleashImpression(flag: string, variant: string | undefined) {
  const timestamp = new Date().toISOString();

  // Проверяем что вариант валидный
  if (!variant || variant === "disabled") {
    console.groupCollapsed(
      `%c[GA] 🧪 AB Test Impression SKIPPED`,
      'color: #9E9E9E; font-weight: bold'
    );
    console.log('🕐 Timestamp:', timestamp);
    console.log('🏷️ Flag:', flag);
    console.log('🎯 Variant:', variant);
    console.log('⚠️ Reason: Invalid variant (disabled or undefined)');
    console.groupEnd();
    return;
  }

  // Проверяем что браузерное окружение
  if (typeof window === "undefined") {
    console.warn('[GA] 🧪 AB Test Impression SKIPPED: Not browser environment');
    return;
  }

  // Проверяем не отправляли ли уже это событие в этой сессии
  const storageKey = `unleash_impression_${flag}_${variant}`;
  const alreadySent = sessionStorage.getItem(storageKey);

  if (alreadySent) {
    // Уже отправляли - пропускаем
    console.groupCollapsed(
      `%c[GA] 🧪 AB Test Impression SKIPPED (Already Sent)`,
      'color: #9E9E9E; font-weight: bold'
    );
    console.log('🕐 Timestamp:', timestamp);
    console.log('🏷️ Flag:', flag);
    console.log('🎯 Variant:', variant);
    console.log('💾 Storage Key:', storageKey);
    console.log('⚠️ Reason: Already sent in this session');
    console.log('📊 Check sessionStorage to verify');
    console.groupEnd();
    return;
  }

  // Проверяем наличие gtag
  if (!window.gtag) {
    console.groupCollapsed(
      `%c[GA] 🧪 AB Test Impression NOT Sent`,
      'color: #FF0000; font-weight: bold'
    );
    console.log('🕐 Timestamp:', timestamp);
    console.log('🏷️ Flag:', flag);
    console.log('🎯 Variant:', variant);
    console.log('❌ Error: Google Analytics not available (window.gtag is undefined)');
    console.log('💡 Solution: Check that GoogleAnalytics component is loaded with measurementId');
    console.groupEnd();
    return;
  }

  // Подготавливаем payload
  const payload = {
    app_name: "witlab-funnel",
    feature: flag,
    treatment: variant,
  };

  // Отправляем событие в Google Analytics
  window.gtag("event", "experiment_impression", payload);

  // Помечаем что отправили
  sessionStorage.setItem(storageKey, "true");

  // Детальное логирование успешной отправки
  console.groupCollapsed(
    `%c[GA] 🧪 AB Test Impression Event Sent`,
    'color: #4285F4; font-weight: bold'
  );
  console.log('🕐 Timestamp:', timestamp);
  console.log('🏷️ Flag:', flag);
  console.log('🎯 Variant:', variant);
  console.log('📦 Event Name:', 'experiment_impression');
  console.log('📦 Payload:', payload);
  console.log('💾 Storage Key:', storageKey);
  console.log('✅ Status: Successfully sent to Google Analytics');
  console.log('🔍 Verify in Network tab: Look for /g/collect requests');
  console.groupEnd();
}

/**
 * Очищает историю отправленных impression (для тестирования)
 * В production обычно не используется
 */
export function clearUnleashImpressions() {
  if (typeof window === "undefined") {
    return;
  }

  const keysToRemove = Object.keys(sessionStorage)
    .filter(key => key.startsWith("unleash_impression_"));
  
  const timestamp = new Date().toISOString();
  
  keysToRemove.forEach(key => sessionStorage.removeItem(key));

  console.groupCollapsed(
    `%c[GA] 🧪 AB Test Impressions Cleared`,
    'color: #FF9800; font-weight: bold'
  );
  console.log('🕐 Timestamp:', timestamp);
  console.log('🧹 Keys Removed:', keysToRemove.length);
  console.log('📋 Removed Keys:', keysToRemove);
  console.log('✅ Status: All AB test impression history cleared');
  console.log('💡 New impressions will be sent on next screen view');
  console.groupEnd();
}
