// Arranque de LilOS web
import { NombreMarca } from './componentes/Marca';
import { StrictMode } from 'react';
import { createRoot } from 'react-dom/client';
import { App } from './App';
import type { Fuente } from './lib/fuente';
import { fuenteSupabase } from './lib/fuente';
import { ProveedorSesion } from './lib/sesion';
import { iniciarErrores } from './lib/errores';
import { crearCliente } from './lib/supabase';
import { aplicarTema } from './lib/tema';
import './estilos/fuente.css';
import './estilos/tokens.css';
import './estilos/base.css';

void iniciarErrores(); // Sentry, solo si esta instalación tiene VITE_SENTRY_DSN
aplicarTema(); // antes de pintar: el tema elegido (día o noche) ya está puesto cuando aparece la pantalla
const raiz = createRoot(document.getElementById('raiz')!);

async function arrancar() {
  // La consola maestra (/consola) es otra aplicación: su propio acceso (correo y contraseña) y su propia sesión
  if (location.pathname.replace(/\/+$/, '') === '/consola') {
    const cliente = crearCliente('lilos.consola');
    if (cliente) {
      const { Consola } = await import('./pantallas/Consola');
      raiz.render(<StrictMode><Consola cliente={cliente} /></StrictMode>);
      return;
    }
  }
  let fuente: Fuente | null = null;
  if (import.meta.env.MODE === 'demo') {
    // Solo con «npm run demo»: datos de ejemplo, sin Supabase (no entra en la web publicada)
    fuente = (await import('./lib/demo')).fuenteDemo();
  } else {
    const cliente = crearCliente();
    if (cliente) fuente = fuenteSupabase(cliente);
  }
  if (!fuente) {
    raiz.render(
      <main className="acceso"><div className="acceso-caja">
        <NombreMarca grande />
        <p>Falta configurar la conexión: copia <code>web/.env.example</code> como <code>web/.env.local</code> y
          rellena <code>VITE_SUPABASE_URL</code> y <code>VITE_SUPABASE_ANON_KEY</code> (o usa <code>npm run demo</code>).</p>
      </div></main>,
    );
    return;
  }
  raiz.render(
    <StrictMode>
      <ProveedorSesion fuente={fuente}>
        <App />
      </ProveedorSesion>
    </StrictMode>,
  );
}

void arrancar();
// En la web publicada, coger sola la versión nueva (ver lib/actualizar.ts)
if (import.meta.env.PROD && import.meta.env.MODE !== 'demo') {
  void import('./lib/actualizar').then((m) => m.vigilarVersion());
}
