// src/components/YandexMetrika.tsx
import { useEffect } from 'react';
import { useLocation } from 'react-router-dom';


// ⚙️ Мой ID счётчика Метрики
const YANDEX_METRIKA_ID = 104768935; // мой ID

declare global {
  interface Window {
    ym?: ((id: number, method: string, ...params: unknown[]) => void) & {
      a?: unknown[];
    };
  }
}

export default function YandexMetrika() {
  const location = useLocation();

  useEffect(() => {
    // 🧩 Не инициализируем Метрику в dev-режиме
    if (import.meta.env.MODE !== 'production') {
      return;
    }

    // 🧩 Подключаем скрипт Метрики, если его ещё нет
    if (!document.getElementById('ym-script')) {
      const script = document.createElement('script');
      script.id = 'ym-script';
      script.src = 'https://mc.yandex.ru/metrika/tag.js';
      script.async = true;
      document.head.appendChild(script);
    }

    // 🧩 Инициализация
    window.ym =
        window.ym ||
        function (...args: unknown[]) {
          (window.ym!.a = window.ym!.a || []).push(args);
        };

    window.ym(YANDEX_METRIKA_ID, 'init', {
      clickmap: true,
      trackLinks: true,
      accurateTrackBounce: true,
      webvisor: true,
    });

    // 🧩 Обработчик переходов
    const handleRouteChange = () => {
      const path = location.pathname;

      // 🚫 Игнорируем внутренние маршруты CRM / админки
      const ignoredPaths = ['/login', '/admin'];

      if (ignoredPaths.some(prefix => path.startsWith(prefix))) {
        return; // не отправляем hit
      }

      // ✅ Отправляем hit для публичных страниц
      window.ym?.(YANDEX_METRIKA_ID, 'hit', path + location.search);
    };

    handleRouteChange();
  }, [location]);

  // 🧩 Поддержка noscript (Яндекс требует для полной валидации)
  return (
      <noscript>
        <div>
          <img
              src={`https://mc.yandex.ru/watch/${YANDEX_METRIKA_ID}`}
              style={{ position: 'absolute', left: '-9999px' }}
              alt=""
          />
        </div>
      </noscript>
  );
}
