// src/main.tsx
import React from 'react';
import ReactDOM from 'react-dom/client';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
/*
import { BancasWidget } from './features/legislativas/provinciales/BancasWidget'
import { CongresoWidget } from './features/legislativas/provinciales/CongresoWidget'
import MapaBsAs from './features/legislativas/provinciales/MapaBsAs'
import { DipSenTickerWidget } from './features/legislativas/provinciales/DipSenTickerWidget'
import { TelegramaWidget } from './features/legislativas/provinciales/TelegramaWidget'
import { ConcejalesWidget } from './features/legislativas/provinciales/ConcejalesWidget'
import MapaBsAsSecciones from './features/legislativas/provinciales/MapaBsAsSecciones'
import { SenadoresWidget } from './features/legislativas/provinciales/SenadoresWidget'
import { DiputadosWidget } from './features/legislativas/provinciales/DiputadosWidget'
import { ResumenGeneralWidget } from './features/legislativas/provinciales/ResumenGeneralWidget'
import { SenadoresTickerWidget } from './features/legislativas/provinciales/SenadoresTickerWidget'
import { DiputadosTickerWidget } from './features/legislativas/provinciales/DiputadosTickerWidget'
import { ConcejalesTickerWidget } from './features/legislativas/provinciales/ConcejalesTickerWidget'
import { DiputadosPorSeccionWidget } from './features/legislativas/provinciales/DiputadosPorSeccionWidget'
import { SenadoresPorSeccionWidget } from './features/legislativas/provinciales/SenadoresPorSeccionWidget'
import { ConcejalesPorSeccionWidget } from './features/legislativas/provinciales/ConcejalesPorSeccionWidget'
import { ResultadosTablaDetalladaWidget } from './features/legislativas/provinciales/ResultadosTablaDetalladaWidget';
import { ResultadosRankingMunicipioWidget } from './features/legislativas/provinciales/ResultadosRankingMunicipioWidget';
*/
//import { DevApp } from './components/common/DevApp';

import { HomeCarouselWidget } from './features/legislativas/nacionales/HomeCarouselWidget';
import { PanelNacionalWidget } from './features/legislativas/nacionales/PanelNacionalWidget';
import { ResultadosNacionalesCardsWidget } from './features/legislativas/nacionales/ResultadosNacionalesCardsWidget';
import { CongresoNacionalWidget } from './features/legislativas/nacionales/CongresoNacionalWidget';

import { DevAppLegislativas } from './features/legislativas/DevAppLegislativas';

const queryClient = new QueryClient();

// Mapeamos el nombre del widget (del atributo data) al componente de React
const WIDGET_MAP: Record<string, React.ElementType> = {
    // Widgets Legislativas Provinciales BsAs 2025
    /*'resumen-senadores': SenadoresWidget,
    'resumen-diputados': DiputadosWidget,
    'resumen-concejales': ConcejalesWidget,
    'congreso-provincial': CongresoWidget,
    'distribucion-bancas': BancasWidget,
    'mapa-municipios': MapaBsAs,
    'mapa-secciones': MapaBsAsSecciones,
    'consulta-telegramas': TelegramaWidget,
    'ticker-senadores': SenadoresTickerWidget,
    'ticker-diputados': DiputadosTickerWidget,
    'ticker-concejales': ConcejalesTickerWidget,
    'ticker-dip-sen': DipSenTickerWidget,
    'resumen-general': ResumenGeneralWidget,
    'diputados-por-seccion': DiputadosPorSeccionWidget,
    'senadores-por-seccion': SenadoresPorSeccionWidget,
    'concejales-por-seccion': ConcejalesPorSeccionWidget,
    'resultados-tabla-detallada-por-seccion' : ResultadosTablaDetalladaWidget,
    'resultados-tabla-detallada-por-municipio' : ResultadosRankingMunicipioWidget,*/
    
    // Widgets Legislativas Nacionales 2025
    'home-carousel': HomeCarouselWidget,
    'panel-nacional': PanelNacionalWidget,
    'resultados-nacionales-cards': ResultadosNacionalesCardsWidget,
    'composicion-congreso-nacional': CongresoNacionalWidget,
};

// Vite establece `import.meta.env.DEV` a `true` cuando ejecutamos 'npm run dev'
if (import.meta.env.DEV) {
    // --- MODO DESARROLLO ---
    // Renderizamos nuestra página de showcase en el div#root
    ReactDOM.createRoot(document.getElementById('root')!).render(
        <React.StrictMode>
            <QueryClientProvider client={queryClient}>
                <DevAppLegislativas />
                {/* <DevApp /> */}
            </QueryClientProvider>
        </React.StrictMode>
    );
} else {
    // --- MODO PRODUCCIÓN ---
    // Exponemos la función de renderizado para el bootstrap.js
    // La función de renderizado acepta el contenedor y las props
    const renderWidgets = (container: HTMLElement, props: DOMStringMap) => {
        const widgetName = props.eleccionesWidget;
        
        if (widgetName && WIDGET_MAP[widgetName]) {
            const WidgetComponent = WIDGET_MAP[widgetName];
            const root = ReactDOM.createRoot(container);
            
            // Pasamos todas las props (ej. { eleccionesWidget: '...', focoMunicipio: '...' })
            // al componente que se va a renderizar.
            root.render(
                <React.StrictMode>
                    <QueryClientProvider client={queryClient}>
                        <WidgetComponent {...props} />
                    </QueryClientProvider>
                </React.StrictMode>
            );
        } else {
             console.error(`React: ERROR - No se encontró un componente para el nombre de widget: "${widgetName}"`);
        }
    };

    // La función expuesta ahora se llamará por cada widget, no una sola vez.
    (window as any).EleccionesWidgets = {
        render: renderWidgets 
    };
}