/* global React */
// Module configurations per role + Home screen + Stub screen.

// ---------------- MODULE DEFINITIONS ----------------
// Each module: id, icon (Lucide name), nav (sidebar label), title (card),
// desc (one-line), badge (optional), variant (card size), inHome (show on home).

const MODULE_DEFS = {
  inicio: {
    id: 'inicio', icon: 'Home', nav: 'Inicio',
    title: 'Inicio', desc: 'Hub principal del sistema.', inHome: false,
  },
  tablero: {
    id: 'tablero', icon: 'LayoutDashboard', nav: 'Tablero de Control',
    title: 'Tablero de Control',
    desc: 'Visualiza el estado de cumplimiento país en tiempo real.',
    variant: 'feature',
  },
  compromisos: {
    id: 'compromisos', icon: 'ListChecks', nav: 'Compromisos',
    title: 'Compromisos',
    desc: 'Consulta, busca y gestiona las recomendaciones internacionales.',
  },
  cargar_avance: {
    id: 'cargar_avance', icon: 'Upload', nav: 'Cargar Avance',
    title: 'Cargar Avance',
    desc: 'Reporta el progreso de los compromisos asignados a tu institución.',
  },
  mis_compromisos: {
    id: 'mis_compromisos', icon: 'ListChecks', nav: 'Mis Compromisos',
    title: 'Mis Compromisos Asignados',
    desc: 'Recomendaciones bajo responsabilidad de tu institución.',
  },
  nueva_recomendacion: {
    id: 'nueva_recomendacion', icon: 'PlusCircle', nav: 'Nueva Recomendación',
    title: 'Nueva Recomendación',
    desc: 'Registra una nueva recomendación o compromiso internacional.',
  },
  mensajeria: {
    id: 'mensajeria', icon: 'MessageSquare', nav: 'Mensajería',
    title: 'Mensajería',
    desc: 'Comunícate con la CGR y las instituciones reportantes.',
  },
  alertas: {
    id: 'alertas', icon: 'Bell', nav: 'Alertas y Plazos',
    title: 'Alertas y Plazos',
    desc: 'Revisa los compromisos próximos a vencer y notificaciones D-7, D-3, D-1.',
  },
  reportes: {
    id: 'reportes', icon: 'FileBarChart', nav: 'Reportes',
    title: 'Reportes',
    desc: 'Genera y exporta reportes consolidados en formato Excel y PDF.',
  },
  reportes_aprobados: {
    id: 'reportes_aprobados', icon: 'FileText', nav: 'Reportes Aprobados',
    title: 'Reportes Aprobados',
    desc: 'Documentos consolidados listos para envío a organismos internacionales.',
    variant: 'feature',
  },
  usuarios: {
    id: 'usuarios', icon: 'Users', nav: 'Usuarios',
    title: 'Usuarios',
    desc: 'Administra cuentas y roles de acceso al sistema.',
  },
  instituciones: {
    id: 'instituciones', icon: 'Building2', nav: 'Instituciones',
    title: 'Instituciones',
    desc: 'Catálogo de instituciones reportantes habilitadas en la plataforma.',
  },
  portal: {
    id: 'portal', icon: 'Globe', nav: 'Portal Público',
    title: 'Portal Público',
    desc: 'Accede a la vista ciudadana del cumplimiento del país.',
    variant: 'accent',
  },
};

// ---------------- ROLE → MODULES ----------------
function modulesForRole(roleId) {
  // helper to attach a badge override
  const m = (id, extras = {}) => ({ ...MODULE_DEFS[id], ...extras });

  if (roleId === 'institucion') {
    return [
      m('inicio'),
      m('mis_compromisos', { badge: { count: 23, tone: 'info' } }),
      m('cargar_avance'),
      m('mensajeria',  { badge: { count: 2, tone: 'danger' } }),
      m('alertas',     { badge: { count: 3, tone: 'danger' } }),
    ];
  }
  if (roleId === 'cancilleria') {
    return [
      m('inicio'),
      m('reportes_aprobados', { badge: { count: 12, tone: 'info' } }),
      m('mensajeria'),
    ];
  }
  // Admin / Super Admin
  return [
    m('inicio'),
    m('tablero'),
    m('compromisos',          { badge: { count: 527, tone: 'info' } }),
    m('nueva_recomendacion'),
    m('mensajeria',           { badge: { count: 3, tone: 'danger' } }),
    m('alertas',              { badge: { count: 5, tone: 'danger' } }),
    m('reportes'),
    m('usuarios'),
    m('instituciones'),
    m('portal'),
  ];
}

// Which modules appear as cards on Home (excludes 'inicio')
function homeModulesForRole(roleId) {
  const all = modulesForRole(roleId).filter(m => m.id !== 'inicio');
  return all;
}

Object.assign(window, { MODULE_DEFS, modulesForRole, homeModulesForRole });
