"use client";

import { useEffect, type ReactNode } from "react";
import ReactGA from "react-ga4";

interface MetricsProviderProps {
  children: ReactNode;
  googleAnalyticsId?: string;
  yandexMetrikaId?: string;
  facebookPixels?: string[];
}

/**
 * Metrics Provider Component
 * 
 * Инициализирует все метрики СИНХРОННО при загрузке приложения
 * по аналогии с aura-webapp для гарантии создания куки ДО авторизации.
 * 
 * Метрики:
 * - Google Analytics (через react-ga4) - синхронная инициализация
 * - Yandex Metrika - синхронная загрузка скрипта
 * - Facebook Pixel - синхронная загрузка скрипта
 * 
 * Это гарантирует что куки (_ga, _gid, _fbp, _fbc, _ym_uid) создаются
 * ДО того как пользователь достигнет экрана авторизации.
 */
export function MetricsProvider({ 
  children, 
  googleAnalyticsId, 
  yandexMetrikaId,
  facebookPixels = []
}: MetricsProviderProps) {
  
  // Инициализация Google Analytics (синхронно через react-ga4)
  useEffect(() => {
    if (!googleAnalyticsId) return;
    
    try {
      ReactGA.initialize(googleAnalyticsId);
      console.log('[Metrics] Google Analytics initialized:', googleAnalyticsId);
    } catch (error) {
      console.error('[Metrics] Failed to initialize Google Analytics:', error);
    }
  }, [googleAnalyticsId]);

  // Инициализация Yandex Metrika (синхронно через скрипт)
  useEffect(() => {
    if (!yandexMetrikaId) return;
    
    try {
      // Проверяем что скрипт еще не загружен
      if (typeof window.ym === 'function') {
        console.log('[Metrics] Yandex Metrika already loaded');
        return;
      }

      // Загружаем скрипт Yandex Metrika
      const script = document.createElement('script');
      script.type = 'text/javascript';
      script.async = true;
      script.src = 'https://mc.yandex.ru/metrika/tag.js';
      
      script.onload = () => {
        // Инициализируем счетчик после загрузки скрипта
        if (typeof window.ym === 'function') {
          window.ym(Number(yandexMetrikaId), 'init', {
            clickmap: true,
            trackLinks: true,
            accurateTrackBounce: true,
            webvisor: true,
          });
          
          // Сохраняем ID счетчика для использования в analytics service
          window.__YM_COUNTER_ID__ = Number(yandexMetrikaId);
          
          console.log('[Metrics] Yandex Metrika initialized:', yandexMetrikaId);
        }
      };
      
      document.head.appendChild(script);
    } catch (error) {
      console.error('[Metrics] Failed to initialize Yandex Metrika:', error);
    }
  }, [yandexMetrikaId]);

  // Инициализация Facebook Pixel (синхронно через скрипт)
  useEffect(() => {
    if (!facebookPixels || facebookPixels.length === 0) return;
    
    try {
      // Проверяем что fbq еще не загружен
      if (typeof window.fbq === 'function') {
        console.log('[Metrics] Facebook Pixel already loaded');
        return;
      }

      // Базовый код Facebook Pixel
      const fbqScript = `
        !function(f,b,e,v,n,t,s)
        {if(f.fbq)return;n=f.fbq=function(){n.callMethod?
        n.callMethod.apply(n,arguments):n.queue.push(arguments)};
        if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
        n.queue=[];t=b.createElement(e);t.async=!0;
        t.src=v;s=b.getElementsByTagName(e)[0];
        s.parentNode.insertBefore(t,s)}(window, document,'script',
        'https://connect.facebook.net/en_US/fbevents.js');
      `;

      // Выполняем базовый код
      const script = document.createElement('script');
      script.type = 'text/javascript';
      script.innerHTML = fbqScript;
      document.head.appendChild(script);

      // Инициализируем каждый пиксель
      if (typeof window.fbq === 'function') {
        const fbq = window.fbq as ((...args: unknown[]) => void);
        facebookPixels.forEach((pixelId) => {
          fbq('init', pixelId);
          console.log('[Metrics] Facebook Pixel initialized:', pixelId);
        });
        
        // Отправляем PageView для всех пикселей
        fbq('track', 'PageView');
      }
    } catch (error) {
      console.error('[Metrics] Failed to initialize Facebook Pixel:', error);
    }
  }, [facebookPixels]);

  return <>{children}</>;
}
