// ─── Dashboard · Panel general (ensamble) ────────────────────────────────
// DashboardScreen: hero + las 12 secciones de dominio, cada una gateada por
// permiso. Extraído de screens-dashboard.jsx (P10, split en screens/
// dashboard/ — compartido.jsx/operaciones.jsx/finanzas-lado.jsx/
// directorio.jsx/herramientas.jsx tienen las 12 secciones en sí). Expone a
// window: DashboardScreen. Consume MicosCurrentUser/MicosPuedeVer (dominio/
// sesion.js), ROUTE_SECTION (core/router.jsx — se carga DESPUÉS que las
// screens en el HTML, pero acá solo se lee dentro del render, cuando React
// ya montó y todos los scripts corrieron), y las 12 funciones de sección de
// los 4 archivos hermanos.
//
// FIX (mapa-comprension.md §inv-dash — "el gating duplica el mapeo
// sección→permiso que también vive en app.jsx/ROUTE_SECTION"): antes cada
// sección tenía su propia línea `puedeVer('<llave literal>')`, una segunda
// copia a mano del MISMO mapeo ruta→permiso que ya vive en `ROUTE_SECTION`
// (core/router.jsx, fuente única del gate deny-by-default del router). Ahora
// `DASHBOARD_SECTIONS` declara la RUTA de "Ver todo" de cada sección (dato
// que de todas formas hay que pasarle a `DashSection`) y el permiso se
// DERIVA de `ROUTE_SECTION[route]` — una sola fuente, cero mapeo duplicado.
// Verificado que la derivación da IDÉNTICO resultado al mapeo manual viejo
// para las 12 secciones (mismas llaves de MICOS_SECCIONES).

const DASHBOARD_SECTIONS = [
  { Component: ExpedientesSection,   route: 'expedientes-list' },
  { Component: ComprasSection,       route: 'compras' },
  { Component: FinanzasLadoSection,  route: 'finanzas', extraProps: { lado: 'cobros' } },
  { Component: FinanzasLadoSection,  route: 'finanzas', extraProps: { lado: 'pagos' } },
  { Component: LogisticaSection,     route: 'logistica' },
  { Component: InventarioSection,    route: 'inventario' },
  { Component: EntidadesSection,     route: 'entidades' },
  { Component: MedicosSection,       route: 'medicos' },
  { Component: ParticularesSection,  route: 'particulares' },
  { Component: CajaChicaSection,     route: 'caja-chica' },
  { Component: AprobacionesSection,  route: 'aprobaciones' },
  { Component: AjustesEntregaSection, route: 'ajustes-inventario' },
];

function DashboardScreen({ onNav }) {
  const greeting = (() => {
    const h = new Date().getHours();
    if (h < 12) return 'Buenos días';
    if (h < 19) return 'Buenas tardes';
    return 'Buenas noches';
  })();
  // Nombre real del usuario logueado (no hardcodeado): MicosCurrentUser() lo deriva
  // de la sesión (/api/me) o del micos-user de storage.
  const firstName = ((typeof MicosCurrentUser === 'function' ? MicosCurrentUser() : null) || {}).nombre || '';
  const todayLabel = new Date().toLocaleDateString('es-AR', { weekday: 'long', day: 'numeric', month: 'long' });
  // Deny-by-default (M17 — BUGS-caza-01-07-2026.md #24): mismo gate que el sidebar
  // (shell.jsx MicosPuedeVer). Sin window.MicosPuedeVer (no cargó dominio/sesion.js) se
  // permite todo, para no romper contextos parciales (ej. Componentes.html).
  const puedeVer = (href) => (window.MicosPuedeVer ? window.MicosPuedeVer(href) : true);

  return (
    <div className="space-y-12 pt-2 pb-8">
      {/* Hero */}
      <div className="animate-fade-in-up">
        <p className="text-[11px] font-bold uppercase tracking-[0.18em]" style={{ color: 'var(--accent)' }}>
          {todayLabel}
        </p>
        <h1 className="text-[clamp(28px,4.2vw,40px)] leading-[1.05] font-extrabold tracking-[-0.02em] mt-3" style={{ color: 'var(--foreground)' }}>
          {firstName ? `${greeting}, ${firstName}` : greeting}
        </h1>
        <p className="text-[13.5px] font-medium mt-3 max-w-2xl" style={{ color: 'var(--muted-foreground)' }}>
          Resumen de cada módulo del ERP — tarjetas con KPIs y los últimos 7 movimientos de cada pantalla.
        </p>
      </div>

      {/* Orden = sidebar. Permiso DERIVADO de ROUTE_SECTION[route] (core/router.jsx) —
          una sola fuente, ver header. */}
      {DASHBOARD_SECTIONS.map(({ Component, route, extraProps }, i) => {
        const permKey = (window.ROUTE_SECTION && window.ROUTE_SECTION[route]) || route;
        if (!puedeVer(permKey)) return null;
        return <Component key={i} onNav={onNav} {...extraProps} />;
      })}
    </div>
  );
}

Object.assign(window, { DashboardScreen });
