// src/main.tsx
import React from 'react'
import ReactDOM from 'react-dom/client'
import App from './App.tsx'
import './index.css'

// 🔧 IMPORTAR CONFIGURACIÓN PWA PERSONALIZADA
import { initializePWA } from './sw-config.ts'
// 🔧 IMPORTAR CONFIGURACIÓN DE SISTEMA
import { SettingsService } from './services/settingsService.ts'

// 🔧 CONFIGURACIÓN DE CONSOLE PARA DESARROLLO
if (import.meta.env.DEV) {
  // Suprimir warnings específicos de Workbox en desarrollo
  const originalWarn = console.warn;
  const originalLog = console.log;
  
  console.warn = (...args: any[]) => {
    const message = args.join(' ');
    
    // Filtrar warnings de Workbox que son normales en desarrollo
    if (
      message.includes('Precaching did not find a match for') ||
      message.includes('No route found for') ||
      message.includes('Using CacheFirst to respond to') ||
      message.includes('Router is responding to') ||
      message.includes('Found a cached response in') ||
      message.includes('No cached response found') ||
      message.includes('Network request for') ||
      message.includes('Response') && message.includes('will not be cached')
    ) {
      return; // Suprimir estos warnings
    }
    
    // Permitir otros warnings importantes
    originalWarn.apply(console, args);
  };
  
  console.log = (...args: any[]) => {
    const message = args.join(' ');
    
    // Filtrar logs verbosos de Workbox
    if (
      message.includes('workbox') && (
        message.includes('Router is responding to') ||
        message.includes('Using CacheFirst') ||
        message.includes('Found a cached response') ||
        message.includes('No cached response found')
      )
    ) {
      return; // Suprimir estos logs
    }
    
    // Permitir otros logs importantes
    originalLog.apply(console, args);
  };
}

// 🔧 RENDERIZAR LA APLICACIÓN
ReactDOM.createRoot(document.getElementById('root')!).render(
  <React.StrictMode>
    <App />
  </React.StrictMode>,
)

// 🔧 INICIALIZAR PWA INMEDIATAMENTE
initializePWA();

// 🔧 INICIALIZAR CONFIGURACIONES DE SISTEMA
SettingsService.initializeCache();

// 🔧 REGISTRO DEL SERVICE WORKER DE VITE-PWA
// Este se ejecuta automáticamente con la configuración de vite.config.ts
// pero lo manejamos manualmente para mejor control

// 🔧 HOT MODULE REPLACEMENT EN DESARROLLO
if (import.meta.hot) {
  import.meta.hot.accept();
  
  // En desarrollo, no limpiar service workers agresivamente
  // para evitar pérdida de estado
  if ('serviceWorker' in navigator && import.meta.env.DEV) {
    console.log('🔄 HMR: Modo desarrollo, preservando SW...');
  }
}

// 🔧 MANEJO DE ERRORES GLOBALES
window.addEventListener('error', (event) => {
  // Filtrar errores de SW que no son críticos
  if (
    event.error?.message?.includes('workbox') ||
    event.filename?.includes('workbox') ||
    event.error?.message?.includes('Failed to fetch')
  ) {
    console.debug('🔧 Error de SW no crítico filtrado:', event.error?.message);
    return;
  }
  
  // Log de errores importantes
  console.error('❌ Error de aplicación:', event.error);
});

// 🔧 MANEJO DE PROMESAS RECHAZADAS
window.addEventListener('unhandledrejection', (event) => {
  // Filtrar rechazos de fetch que son normales en PWA
  if (
    event.reason?.message?.includes('Failed to fetch') ||
    event.reason?.message?.includes('NetworkError') ||
    event.reason?.toString().includes('workbox')
  ) {
    console.debug('🔧 Rechazo de promesa no crítico filtrado:', event.reason);
    event.preventDefault(); // Prevenir que aparezca en consola
    return;
  }
  
  // Log de rechazos importantes
  console.error('❌ Promesa rechazada:', event.reason);
});

// 🔧 DETECTAR CAMBIOS DE CONECTIVIDAD
window.addEventListener('online', () => {
  // console.log('🌐 Conexión restaurada');
  // Aquí podrías disparar una sincronización o actualización
});

window.addEventListener('offline', () => {
  // console.log('📱 Modo offline activado');
  // Aquí podrías mostrar un indicador de offline
});

// 🔧 OPTIMIZACIÓN DE RENDIMIENTO
// Lazy loading de módulos no críticos
if ('requestIdleCallback' in window) {
  requestIdleCallback(() => {
    // Precargar módulos que se usarán posteriormente
    import('./pages/Home.tsx').catch(() => {
      console.debug('🔧 Precarga opcional falló');
    });
    
    // Precargar stores de persistencia
    import('./store/persistenceStore.ts').catch(() => {
      console.debug('🔧 Precarga de persistenceStore falló');
    });
  });
}

// 🔧 INFORMACIÓN DE DEBUG EN DESARROLLO
if (import.meta.env.DEV) {
  // console.log('🚀 Saludly PWA iniciada en modo desarrollo');
  // console.log('📱 PWA habilitada:', import.meta.env.VITE_PWA_ENABLED !== 'false');
  // console.log('🔧 HMR activo:', !!import.meta.hot);
}