import { createRoot } from 'react-dom/client'
import App from './App.tsx'
import './index.css'
import { registerSW } from 'virtual:pwa-register'
import { supabase } from '@/integrations/supabase/client'
import { executePWADevKillSwitch } from './utils/pwaDevKillSwitch'

// Global type declarations
declare global {
  const __APP_VERSION__: string;
  const __APP_ENV__: string;
}

// Log app version for debugging
console.log(`[App] Version: ${__APP_VERSION__} | Environment: ${__APP_ENV__}`);

// Execute kill switch in development (only once per session)
// NOTE: We intentionally do NOT reload after cleanup — caches/SW are already
// cleared before React renders, and an automatic reload was causing a white
// flash plus interfering with the landing-page country redirect.
if (import.meta.env.DEV) {
  executePWADevKillSwitch().then(executed => {
    if (executed) {
      console.log('[Dev] Cache cleared (no reload — continuing render)');
    }
  });
}

// Enhanced dynamic manifest updater with cache-busting
const updateDynamicManifest = async () => {
  const version = __APP_VERSION__;
  const cacheBuster = `?v=${version}`;
  
  try {
    const { data: manifestData, error } = await supabase.functions.invoke('get-dynamic-manifest');
    
    if (error) {
      console.warn('[PWA] Error loading dynamic manifest:', error);
      throw error;
    }
    
    if (manifestData) {
      updateMetaTags(manifestData, cacheBuster);
      console.log('[PWA] ✅ Dynamic manifest loaded:', manifestData.name, '| Version:', version);
    }
  } catch (error) {
    console.warn('[PWA] ⚠️ Failed to load dynamic manifest:', error);
  }
};

const updateMetaTags = (data: any, cacheBuster: string) => {
  // Update meta theme-color
  const themeColorMeta = document.querySelector('meta[name="theme-color"]') as HTMLMetaElement;
  if (themeColorMeta && data.theme_color) {
    themeColorMeta.content = data.theme_color;
  }

  // Update title
  if (data.name && data.name !== document.title) {
    document.title = data.name;
  }

  // Update favicons with cache-busting
  const favicon = document.querySelector('link[rel="icon"]') as HTMLLinkElement;
  if (favicon && data.icons?.[0]?.src) {
    favicon.href = data.icons[0].src + cacheBuster;
  }

  const appleTouchIcon = document.querySelector('link[rel="apple-touch-icon"]') as HTMLLinkElement;
  if (appleTouchIcon && data.icons?.[0]?.src) {
    appleTouchIcon.href = data.icons[0].src + cacheBuster;
  }

  // Update manifest link with cache-busting
  const manifestLink = document.querySelector('link[rel="manifest"]') as HTMLLinkElement;
  if (manifestLink) {
    const baseHref = manifestLink.href.split('?')[0];
    manifestLink.href = baseHref + cacheBuster;
  }
};

// Enhanced service worker registration - Only in production
if (import.meta.env.PROD) {
  // Version tracking for auto-updates
  const currentVersion = __APP_VERSION__;
  const storedVersion = localStorage.getItem('app_version');
  
  if (storedVersion && storedVersion !== currentVersion) {
    console.log(`[PWA] Version mismatch detected: ${storedVersion} → ${currentVersion}`);
  }
  
  localStorage.setItem('app_version', currentVersion);

  const updateSW = registerSW({
    onNeedRefresh() {
      console.log('[PWA] 🔄 Update available');
      const isMobile = /Android|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
      if (isMobile) {
        setTimeout(() => updateSW(true), 1000);
      } else {
        if (confirm('Nova versão disponível. Atualizar agora?')) {
          updateSW(true);
        }
      }
    },
    onOfflineReady() {
      console.log('[PWA] ✅ App ready for offline use');
    },
    onRegistered(registration) {
      console.log('[PWA] ✅ Service Worker registered');
      
      // Auto-update on version change
      if (storedVersion && storedVersion !== currentVersion) {
        console.log('[PWA] Auto-updating due to version change...');
        setTimeout(() => updateSW(true), 2000);
      }
      
      // Periodic update check
      setInterval(() => {
        registration?.update();
      }, 30000);
    }
  });
} else {
  console.log('[Dev] Service Worker disabled in development mode');
}

// Load dynamic manifest on start - Always
updateDynamicManifest();

createRoot(document.getElementById("root")!).render(<App />);
