import { createRoot } from "react-dom/client";
import App from "./App";
import "./index.css";
import { initializeGBPTracking } from "@/utils/analytics";

// GDPR-compliant consent checking
const hasAnalyticsConsent = (): boolean => {
  try {
    // Check multiple consent storage locations used by the app
    const klaroConsent = localStorage.getItem('klaro-consent');
    const energieDocConsent = localStorage.getItem('energiedoc-cookie-consent');
    
    if (klaroConsent) {
      const consent = JSON.parse(klaroConsent);
      return consent.analytics === true;
    }
    
    if (energieDocConsent) {
      const consent = JSON.parse(energieDocConsent);
      return consent.analytics === true;
    }
    
    return false;
  } catch {
    return false;
  }
};

// GDPR-compliant GA4 initialization - only loads with explicit consent
const initializeGA4 = () => {
  if (!hasAnalyticsConsent()) {
    console.log('🚫 GA4 blocked - No analytics consent given (GDPR compliant)');
    return;
  }
  
  console.log('✅ GA4 initializing - Analytics consent granted');
  
  // Get GA4 measurement ID from environment variable
  const GA4_MEASUREMENT_ID = import.meta.env.VITE_GA4_ID || 'G-XXXXXXXXXX';
  
  // Load GA4 gtag script
  const script = document.createElement('script');
  script.async = true;
  script.src = `https://www.googletagmanager.com/gtag/js?id=${GA4_MEASUREMENT_ID}`;
  document.head.appendChild(script);
  
  // Initialize gtag
  window.dataLayer = window.dataLayer || [];
  function gtag(...args: any[]) {
    window.dataLayer.push(args);
  }
  
  // Make gtag globally available
  window.gtag = gtag;
  
  // Configure GA4
  gtag('js', new Date());
  gtag('config', GA4_MEASUREMENT_ID, {
    page_title: 'EnergieDoc - Energieberatung Deutschland',
    page_location: window.location.href,
    custom_map: {
      'city_context': 'custom_parameter_1',
      'source_type': 'custom_parameter_2',
      'conversion_type': 'custom_parameter_3'
    }
  });
};

// Enhanced consent-aware tracking initialization
const initializeConsentAwareTracking = () => {
  if (!hasAnalyticsConsent()) {
    console.log('🚫 Tracking blocked - No analytics consent (GDPR compliant)');
    return;
  }
  
  console.log('✅ Tracking initialized - Analytics consent granted');
  initializeGBPTracking();
};

// GDPR-compliant analytics initialization on DOM ready
document.addEventListener('DOMContentLoaded', () => {
  initializeGA4();
  initializeConsentAwareTracking();
});

// Listen for consent changes and initialize analytics when granted
window.addEventListener('storage', (e) => {
  if (e.key === 'klaro-consent' || e.key === 'energiedoc-cookie-consent') {
    if (hasAnalyticsConsent() && !window.gtag) {
      console.log('✅ Consent granted - Initializing analytics');
      initializeGA4();
      initializeConsentAwareTracking();
    }
  }
});

// Also listen for consent changes within the same tab
setInterval(() => {
  if (hasAnalyticsConsent() && !window.gtag) {
    console.log('✅ Consent detected - Late-initializing analytics');
    initializeGA4();
    initializeConsentAwareTracking();
  }
}, 2000);

window.addEventListener('error', (event) => {
  try {
    fetch('/api/client-error', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({
        message: event.message,
        filename: event.filename,
        lineno: event.lineno,
        colno: event.colno,
        stack: event.error?.stack,
        url: window.location.href,
        ua: navigator.userAgent
      })
    }).catch(() => {});
  } catch {}
});

const triggerChunkReload = () => {
  const lastReload = parseInt(sessionStorage.getItem('vite-chunk-reload-ts') || '0', 10);
  const now = Date.now();
  if (!lastReload || now - lastReload > 12000) {
    sessionStorage.setItem('vite-chunk-reload-ts', String(now));
    console.warn('[Vite] Stale chunk detected after deployment. Refreshing application...');
    const url = new URL(window.location.href);
    url.searchParams.set('_v', String(now));
    window.location.replace(url.toString());
  }
};

window.addEventListener('vite:preloadError', (event) => {
  event.preventDefault();
  triggerChunkReload();
});

window.addEventListener('unhandledrejection', (event) => {
  const message = String(event.reason?.message || event.reason || '');
  if (
    message.includes('Failed to fetch dynamically imported module') ||
    message.includes('Importing a module script failed') ||
    message.includes('error loading dynamically imported module') ||
    message.includes('Loading chunk') ||
    message.includes('CSS chunk')
  ) {
    event.preventDefault();
    triggerChunkReload();
    return;
  }

  try {
    fetch('/api/client-error', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({
        message: message,
        stack: event.reason?.stack,
        type: 'unhandledrejection',
        url: window.location.href,
        ua: navigator.userAgent
      })
    }).catch(() => {});
  } catch {}
});

import { ThemeProvider } from "@/components/theme-provider";

createRoot(document.getElementById("root")!).render(
  <ThemeProvider defaultTheme="light" storageKey="energiedoc-theme">
    <App />
  </ThemeProvider>
);
