import React from 'react';
import ReactDOM from 'react-dom/client';
import './src/index.css';
import App from './App';
import { injectGEOMeta } from './utils/geo';
import { initSEOMonitor } from './utils/seo-advanced';
import { initGEO } from './utils/geo-advanced';
import { initAntiClone } from './utils/anti-clone';

// 性能监控：报告Web Vitals指标
const reportWebVitals = (metric: { name: string; value: number }) => {
  // 可以发送到分析服务
  if ((import.meta as any).env?.DEV) {
    console.log(`[Performance] ${metric.name}: ${metric.value.toFixed(2)}`);
  }
};

// 监听性能指标
if (typeof window !== 'undefined' && 'PerformanceObserver' in window) {
  // 监听LCP (Largest Contentful Paint)
  try {
    const lcpObserver = new PerformanceObserver((list) => {
      const entries = list.getEntries();
      const lastEntry = entries[entries.length - 1];
      reportWebVitals({ name: 'LCP', value: lastEntry.startTime });
    });
    lcpObserver.observe({ type: 'largest-contentful-paint', buffered: true });
  } catch (e) {}

  // 监听FID (First Input Delay)
  try {
    const fidObserver = new PerformanceObserver((list) => {
      const entries = list.getEntries();
      entries.forEach((entry: any) => {
        reportWebVitals({ name: 'FID', value: entry.processingStart - entry.startTime });
      });
    });
    fidObserver.observe({ type: 'first-input', buffered: true });
  } catch (e) {}
}

const rootElement = document.getElementById('root');
if (!rootElement) {
  throw new Error("Could not find root element to mount to");
}

const root = ReactDOM.createRoot(rootElement);
root.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>
);

// 注入GEO Meta标签（生成引擎优化）
injectGEOMeta();

// 初始化高级GEO优化
initGEO();

// 初始化SEO监控（开发环境）
initSEOMonitor();

// 初始化防克隆保护
initAntiClone({
  allowedDomains: [
    'localhost',
    '127.0.0.1',
    'ybbe.com',
    'www.ybbe.com',
  ],
  disableRightClick: true,
  disableDevTools: true,
  disableIframe: true,
  showConsoleCopyright: true,
});

// 注册Service Worker (生产环境)
if ('serviceWorker' in navigator && !(import.meta as any).env?.DEV) {
  window.addEventListener('load', () => {
    navigator.serviceWorker.register('/sw.js')
      .then((registration) => {
        console.log('[SW] Registered:', registration.scope);
      })
      .catch((error) => {
        console.error('[SW] Registration failed:', error);
      });
  });
}