import { createHash } from 'crypto';
/**
 * Catálogo de pantallas del ERP. Una entrada por sección/módulo accesible
 * desde el menú principal. Mantenido a mano (se actualiza cuando se agrega
 * un módulo nuevo).
 *
 * La ingesta convierte cada entrada en un AyudaDocumento con fuente='catalogo'
 * y contenido_md descriptivo, para que el bot pueda responder "dónde está X".
 */
export interface CatalogoEntrada {
  screen_key: string;
  titulo: string;
  ruta_url: string;          // ruta principal (deeplink que muestra el bot)
  rutas_extra?: string[];    // rutas alias que también deben mapear a este screen_key
  breadcrumb: string[];      // ej. ["Menú", "Facturación", "POS Admin"]
  descripcion: string;
  aliases?: string[];        // términos coloquiales para boost de retrieval
}

export const CATALOGO: CatalogoEntrada[] = [
  // ---------- Facturación / Ventas ----------
  {
    screen_key: 'facturacion/posAdmin',
    titulo: 'POS Admin',
    ruta_url: '/pos-admin',
    breadcrumb: ['Menú', 'Ventas', 'Facturación', 'pestaña Facturas', 'botón Nueva Factura'],
    descripcion: 'Pantalla de venta con menú lateral (POS Admin): emitir facturas. Se abre desde Ventas › Facturación › pestaña Facturas › botón "Nueva Factura". Si la caja no está abierta, primero pide la Apertura de Caja.',
  },
  {
    screen_key: 'facturacion/posRetail',
    titulo: 'POS Retail',
    ruta_url: '/pos',
    breadcrumb: ['Menú', 'Ventas', 'POS'],
    descripcion: 'POS para cajeros de comercio minorista. Foco en velocidad de cobro.',
  },
  {
    screen_key: 'facturacion/lista',
    titulo: 'Lista de Facturas',
    ruta_url: '/ventas',
    breadcrumb: ['Menú', 'Ventas', 'Facturación', 'pestaña Facturas'],
    descripcion: 'Listado de facturas emitidas (pantalla Ventas › Facturación, pestañas: Facturas, Notas de Crédito, Notas de Débito, Remisiones, Órdenes de Venta, Marangatu). Desde acá se anula, se reimprime, se reenvía por email/WhatsApp, se genera nota de crédito y se consulta el estado SIFEN. El botón "Nueva Factura" abre el POS Admin.',
    aliases: ['factura', 'anular', 'cancelar', 'sifen', 'cdc', 'comprobante'],
  },
  {
    screen_key: 'facturacion/notasCredito',
    titulo: 'Notas de Crédito',
    ruta_url: '/ventas/notas-credito',
    breadcrumb: ['Menú', 'Ventas', 'Facturación', 'pestaña Notas de Crédito'],
    descripcion: 'Listar y emitir notas de crédito que anulan total o parcialmente una factura. Requiere factura origen y motivo.',
  },

  // ---------- Créditos / Solicitudes ----------
  {
    screen_key: 'solicitudes/credito',
    titulo: 'Solicitudes de Crédito',
    ruta_url: '/solicitudes-credito',
    rutas_extra: ['/creditos/solicitudes', '/creditos'],
    breadcrumb: ['Menú', 'Ventas', 'Créditos'],
    descripcion: 'Cargar y gestionar solicitudes de crédito (financiación en cuotas): selección de productos, plan de cuotas, días de gracia, entrega inicial, cobrador asignado, aprobación supervisor y facturación desde POS.',
    aliases: ['credito', 'crédito', 'prestamo', 'préstamo', 'financiacion', 'financiación', 'cuotas', 'solicitud'],
  },

  // ---------- Cobros ----------
  {
    screen_key: 'cobros/recibos',
    titulo: 'Recibos / Cobros',
    ruta_url: '/cobros',
    breadcrumb: ['Menú', 'Cobranzas', 'Cobros'],
    descripcion: 'Registro de pagos recibidos de clientes a crédito (Cobranzas › Cobros, pantalla "Gestión de Cobros"). Permite cobros simples y multi-factura, múltiples medios de pago, y genera asientos contables automáticos según el mapeo de cuentas. El listado de recibos emitidos está en Cobranzas › Recibos.',
  },
  {
    screen_key: 'cobros/panelCobrador',
    titulo: 'Panel del Cobrador',
    ruta_url: '/cobranzas/panel-cobrador',
    breadcrumb: ['Menú', 'Cobranzas'],
    descripcion: 'El Panel del Cobrador está deshabilitado: hoy NO aparece en el menú. No indicar una ruta para esta pantalla.',
  },

  // ---------- Tesorería ----------
  {
    screen_key: 'tesoreria/cheques',
    titulo: 'Cheques',
    ruta_url: '/tesoreria-bancos',
    breadcrumb: ['Menú', 'Tesorería', 'pestaña Cheques'],
    descripcion: 'Cartera de cheques recibidos y emitidos. Permite registrar, depositar, anular, marcar como cobrado o rechazado, y filtrar por banco, fecha de emisión, vencimiento o recepción.',
  },
  {
    screen_key: 'tesoreria/cajas',
    titulo: 'Caja del Día (apertura, cierre, entradas y salidas de caja)',
    ruta_url: '/finanzas',
    rutas_extra: ['/tesoreria'],
    breadcrumb: ['Menú', 'Finanzas', 'pestaña Caja del Día'],
    descripcion: 'Sesiones de caja del día. Pantalla "Finanzas" (ítem Finanzas del menú principal), pestaña "Caja del Día" (las otras pestañas: Asignación, Rendiciones, Anticipos a Empleados, CxP a Empleados, Saldos por Empleado). Botón "Abrir Nueva Caja" para aperturar. En la tarjeta de la caja ABIERTA: botón "Entrada" (ingreso manual de dinero) y "Salida" (egreso manual), que piden Monto (obligatorio) y Concepto; y "Cerrar Caja" para el cierre y arqueo. OJO: NO está en el ítem "Tesorería" del menú (esa es la pantalla Tesorería y Bancos).',
    aliases: ['caja', 'arqueo', 'sesion', 'sesión', 'apertura', 'cierre', 'turno', 'cuadre', 'caja del dia', 'caja del día', 'entrada de caja', 'salida de caja', 'ingreso manual', 'egreso manual', 'meter plata en la caja', 'retirar plata de la caja'],
  },
  {
    screen_key: 'tesoreria/cuentasBancarias',
    titulo: 'Cuentas de Tesorería',
    ruta_url: '/tesoreria-bancos',
    breadcrumb: ['Menú', 'Tesorería', 'pestaña Cuentas y Saldos'],
    descripcion: 'Cuentas de tesorería propias de la empresa (caja, bancos Cta. Cte./Caja de Ahorro, billeteras) y su saldo: ítem Tesorería del menú (pantalla "Tesorería y Bancos"), pestaña "Cuentas y Saldos", con el botón "Nueva Cuenta". Los ingresos y egresos registrados se consultan en la pestaña "Movimientos" (Global / Extracto). Parámetros y categorías de movimiento se configuran en Configuración › Tesorería y Bancos. Las entradas/salidas de la caja del día NO se hacen acá sino en Finanzas › pestaña Caja del Día.',
  },
  {
    screen_key: 'tesoreria/conciliacion',
    titulo: 'Conciliación Bancaria',
    ruta_url: '/tesoreria-bancos',
    breadcrumb: ['Menú', 'Tesorería', 'pestaña Conciliación'],
    descripcion: 'Conciliar movimientos del extracto bancario con los registros del ERP.',
  },
  {
    screen_key: 'tesoreria/reportes',
    titulo: 'Reportes Tesorería',
    ruta_url: '/tesoreria-bancos',
    breadcrumb: ['Menú', 'Tesorería', 'pestaña Reportes'],
    descripcion: 'Extracto de cuenta y cartera de cheques (Tesorería › pestaña Reportes). Posición de caja, flujo de caja y movimientos de caja están en Reportes › Administrativos y Financieros.',
  },

  // ---------- Productos / Stock ----------
  {
    screen_key: 'productos/lista',
    titulo: 'Productos',
    ruta_url: '/inventario?tab=productos',
    breadcrumb: ['Menú', 'Productos', 'pestaña Productos'],
    descripcion: 'El ítem Productos del menú abre la pantalla "Gestión de Inventario" con pestañas: Productos, Categorías, Marcas, Atributos, Stock, Lotes, Ajuste, Transferencias, Ofertas, Listas Precios, Inv. Físico. En la pestaña Productos: alta ("Nuevo Producto"), edición, IVA y código de barras.',
  },
  {
    screen_key: 'productos/listasPrecios',
    titulo: 'Listas de Precios',
    ruta_url: '/inventario?tab=listas-precios',
    breadcrumb: ['Menú', 'Productos', 'pestaña Listas Precios'],
    descripcion: 'Crear listas de precios (Minorista, Mayorista, etc.), asignar precio por producto y vincularlas a clientes para que se traigan automáticamente al facturar.',
  },
  {
    screen_key: 'stock/movimientos',
    titulo: 'Movimientos de Stock',
    ruta_url: '/reportes/inventario/movimientos',
    breadcrumb: ['Menú', 'Reportes', 'Inventario', 'Movimientos de Stock'],
    descripcion: 'Reporte de solo lectura de movimientos de stock (Reportes › sección Inventario › Movimientos de Stock): ingresos por compra, egresos por venta, ajustes y reversiones por anulación. Filtros por producto, depósito, tipo y fecha. No sirve para cargar stock: eso se hace en Productos › pestaña Ajuste.',
  },
  {
    screen_key: 'stock/inventario',
    titulo: 'Stock, Ajustes y Transferencias de inventario',
    ruta_url: '/inventario?tab=stock',
    rutas_extra: ['/inventario', '/reportes/inventario/stock'],
    breadcrumb: ['Menú', 'Productos', 'pestaña Stock'],
    descripcion: 'Todo el stock se maneja desde el ítem Productos del menú (pantalla "Gestión de Inventario"). Existencias por depósito: pestaña Stock. Cargar o corregir stock (AJUSTE DE STOCK de entrada o salida): pestaña "Ajuste" (panel "Ajuste de Stock", tipo Entrada o Salida). Traslado entre depósitos: pestaña Transferencias. Lotes: pestaña Lotes. Conteo físico: pestaña Inv. Físico. Reporte de existencias: Reportes › Inventario › Niveles de Stock. NO existe un ítem "Stock" en el menú principal.',
    aliases: ['stock', 'inventario', 'existencias', 'deposito', 'depósito', 'lotes', 'ajuste', 'ajuste de stock', 'ajustar stock', 'cargar stock', 'corregir stock', 'transferencia de stock', 'inventario fisico', 'inventario físico'],
  },

  // ---------- Contactos ----------
  {
    screen_key: 'contactos/clientes',
    titulo: 'Clientes',
    ruta_url: '/contactos?tab=clientes',
    breadcrumb: ['Menú', 'Contactos', 'pestaña Clientes'],
    descripcion: 'Alta, edición y consulta de clientes. Configurá naturaleza (Contribuyente/No Contribuyente), tipo de operación SIFEN (B2B/B2C/B2G), datos fiscales, listas de precios.',
  },
  {
    screen_key: 'contactos/proveedores',
    titulo: 'Proveedores',
    ruta_url: '/contactos?tab=proveedores',
    breadcrumb: ['Menú', 'Contactos', 'pestaña Proveedores'],
    descripcion: 'Alta y mantenimiento de proveedores.',
  },

  // ---------- Compras ----------
  {
    screen_key: 'compras/facturasCompra',
    titulo: 'Facturas de Compra',
    ruta_url: '/compras',
    breadcrumb: ['Menú', 'Compras', 'pestaña Facturas'],
    descripcion:
      'Registrar comprobantes de compra recibidos; al cargar una compra directa con "Afectar stock" activo, el stock entra al Depósito Inventario elegido. IMPORTANTE — compra del exterior / documento aduanero: NO existe un "tipo de comprobante: documento aduanero" en Compras. Para importar MERCADERÍA GENERAL y que entre a stock, cargala como compra directa normal: Compras › pestaña Facturas › botón "Nueva compra" → Proveedor (tipo "Proveedor del exterior") → elegir Depósito Inventario → cargar ítems del catálogo con cantidades y costos → guardar (el número/invoice extranjero va en Número Factura, texto libre). El despacho aduanero formal con prorrateo de fletes/tributos SOLO existe en el módulo Importaciones y en v1 aplica únicamente al perfil AUTOS (vehículos importados); para consumo masivo ese perfil no está habilitado y los costos de nacionalización se suman al costo de los ítems o como gasto. Verificar el ingreso en Reportes › Inventario › Movimientos de Stock.',
    aliases: ['compra', 'factura de compra', 'compra del exterior', 'importacion', 'documento aduanero', 'despacho', 'aduana', 'compra extranjero', 'ingresar stock por compra', 'afectar stock', 'deposito inventario', 'proveedor del exterior'],
  },
  {
    screen_key: 'compras/ordenes',
    titulo: 'Órdenes de Compra',
    ruta_url: '/compras',
    breadcrumb: ['Menú', 'Compras', 'pestaña Órdenes de compra'],
    descripcion: 'Generar y aprobar órdenes de compra hacia proveedores.',
  },
  {
    screen_key: 'compras/recepciones',
    titulo: 'Recepciones de Compra',
    ruta_url: '/compras',
    breadcrumb: ['Menú', 'Compras', 'pestaña Recepciones'],
    descripcion: 'Recibir mercadería de proveedor contra órdenes de compra.',
  },
  {
    screen_key: 'compras/pagosProveedor',
    titulo: 'Pagos a Proveedor (Orden de Pago)',
    ruta_url: '/compras',
    breadcrumb: ['Menú', 'Compras', 'pestaña Orden de Pago'],
    descripcion: 'Pagar facturas de proveedor (efectivo, transferencia, cheque).',
  },

  // ---------- RRHH ----------
  {
    screen_key: 'rrhh',
    titulo: 'Recursos Humanos',
    ruta_url: '/rrhh',
    breadcrumb: ['Menú', 'Recursos Humanos'],
    descripcion: 'Módulo de Recursos Humanos: empleados, novedades, anticipos, préstamos, vacaciones, liquidaciones quincenales y mensuales, IPS, acreditaciones bancarias, desvinculaciones.',
  },
  {
    screen_key: 'rrhh/liquidaciones',
    titulo: 'Liquidaciones',
    ruta_url: '/rrhh?tab=liquidaciones',
    breadcrumb: ['Menú', 'Recursos Humanos', 'pestaña Liquidaciones'],
    descripcion: 'Generar y cerrar liquidaciones (quincenal/mensual). Requiere parámetros vigentes, conceptos y empleados activos.',
  },
  {
    screen_key: 'rrhh/empleados',
    titulo: 'Empleados',
    ruta_url: '/rrhh?tab=empleados',
    breadcrumb: ['Menú', 'Recursos Humanos', 'pestaña Empleados'],
    descripcion: 'Alta y mantenimiento de empleados con datos personales, contractuales, IPS, cuenta bancaria.',
  },

  // ---------- Contabilidad ----------
  {
    screen_key: 'contabilidad/asientos',
    titulo: 'Asientos Contables',
    ruta_url: '/contabilidad',
    breadcrumb: ['Menú', 'Contabilidad', 'pestaña Asientos'],
    descripcion: 'Ver y editar asientos contables generados automáticamente o cargados manualmente. Filtros por fecha, cuenta y tipo.',
  },
  {
    screen_key: 'contabilidad/planCuentas',
    titulo: 'Plan de Cuentas',
    ruta_url: '/contabilidad',
    breadcrumb: ['Menú', 'Contabilidad', 'pestaña Plan de Cuentas'],
    descripcion: 'Mantenimiento del plan de cuentas y configuración de cuentas por defecto para los asientos automáticos.',
  },
  {
    screen_key: 'contabilidad/libroDiario',
    titulo: 'Libro Diario',
    ruta_url: '/contabilidad',
    breadcrumb: ['Menú', 'Reportes', 'Contabilidad Financiera', 'Libro Diario'],
    descripcion: 'Libro diario (Reportes › sección Contabilidad Financiera › Libro Diario; en la misma sección: Libro Mayor, Balance de Comprobación, Estado de Resultados, Balance General). También hay reportes contables en Contabilidad › pestaña Reportes.',
  },

  // ---------- Ofertas / Promociones / Presupuestos / Listas / Comisiones ----------
  {
    screen_key: 'ofertas',
    titulo: 'Ofertas y Promociones',
    ruta_url: '/inventario?tab=ofertas',
    breadcrumb: ['Menú', 'Productos', 'pestaña Ofertas'],
    descripcion: 'Crear y mantener descuentos, precios especiales, NxM (3x2), combos y promos que el POS aplica automáticamente según vigencia, sucursal, producto, categoría o marca.',
    aliases: ['oferta', 'promocion', 'promoción', 'descuento', '3x2', 'nxm', 'combo', 'happy hour', 'precio especial'],
  },
  {
    screen_key: 'presupuestos',
    titulo: 'Presupuestos / Cotizaciones',
    ruta_url: '/presupuestos',
    breadcrumb: ['Menú', 'Ventas', 'Presupuestos'],
    descripcion: 'Emitir presupuestos / cotizaciones a clientes, enviar por email con portal público, tracking de visualización, aprobación interna y conversión a orden de venta / factura.',
    aliases: ['presupuesto', 'cotizacion', 'cotización', 'budget', 'quote', 'oferta comercial'],
  },
  {
    screen_key: 'listas-precios',
    titulo: 'Listas de Precios',
    ruta_url: '/inventario?tab=listas-precios',
    breadcrumb: ['Menú', 'Productos', 'pestaña Listas Precios'],
    descripcion: 'Listas de precios por tipo (general / cliente / zona / canal) con prioridad, vigencia, moneda, descuento%, recargo% y rangos min/max por producto. Lookup automático en el POS según cliente y vigencia.',
    aliases: ['lista de precios', 'precio especial', 'mayorista', 'minorista', 'precio cliente', 'tarifa'],
  },
  {
    screen_key: 'comisiones',
    titulo: 'Comisiones a Resellers',
    ruta_url: '/suscripciones',
    breadcrumb: ['Menú', 'Suscripciones', 'pestaña Comisiones'],
    descripcion: 'Cálculo y liquidación de comisiones recurrentes a resellers por las suscripciones vendidas a subsidiarias. Generación mensual automática. El holding las ve en Suscripciones › pestaña Comisiones; el reseller, en Suscripciones › pestaña Mis Comisiones. (Las comisiones de vendedores/cobradores son otra cosa: Finanzas › Comisiones.)',
    aliases: ['comision', 'comisión', 'reseller', 'holding', 'subsidiaria', 'mis comisiones', 'liquidar'],
  },

  // ---------- Configuración (nuevas guías) ----------
  {
    screen_key: 'configuracion/empresa',
    titulo: 'Información de la Empresa',
    ruta_url: '/configuracion?tab=empresa',
    breadcrumb: ['Menú', 'Configuración', 'Empresa', 'Datos de la Empresa'],
    descripcion: 'Datos fiscales (RUC, DV, razón social), logo, correo de notificación, timbrado SIFEN, certificado digital .p12, actividades económicas, empresas asociadas (holding/reseller/subsidiaria), suscripción y onboarding. También los RUBROS (unidades de negocio): cuando una empresa opera dos negocios distintos en sucursales distintas, el rubro separa el catálogo y los proveedores de cada uno. Se administran en Configuración → Empresa → Rubros.',
    aliases: ['empresa', 'ruc', 'timbrado', 'certificado', 'sifen', 'razon social', 'datos fiscales', 'holding', 'suscripcion', 'onboarding', 'rubro', 'rubros', 'unidad de negocio', 'separar por rubro', 'dos negocios', 'selector de rubro', 'todos los rubros', 'no veo un proveedor', 'no veo un producto', 'catalogo mezclado'],
  },
  {
    screen_key: 'configuracion/puntos-de-venta',
    titulo: 'Sucursales, Cajas, Puntos de Expedición y Numeraciones',
    ruta_url: '/configuracion?tab=sucursales',
    breadcrumb: ['Menú', 'Configuración', 'Puntos de Venta', 'Sucursales y Cajas'],
    descripcion: 'Jerarquía Sucursal (punto_establecimiento) → Caja → Punto de Expedición → numeraciones por tipo de documento, PIN de supervisor, arqueo y fondo fijo. OJO: el TIPO de POS (Retail vs Admin), el layout y la impresora NO se configuran acá sino en la pantalla vecina "Configuración POS" (ver screen_key configuracion/pos). Las NUMERACIONES de documentos (inicializar / crear la serie de Factura, Nota de Crédito, etc.) se administran ACÁ, dentro de cada punto de expedición: Configuración → Puntos de Venta → Sucursales y Cajas → entrar a la sucursal (Ver detalle) → pestaña CAJAS → expandir la caja → en el Punto de Expedición hacer clic en el botón "Numeraciones" → Nueva numeración. NO existe una pantalla ni pestaña propia llamada "Numeraciones" en el menú principal ni en Configuración.',
    aliases: ['sucursal', 'caja', 'punto de venta', 'pos', 'punto de expedicion', 'numeracion', 'numeraciones', 'inicializar numeracion', 'donde creo la numeracion', 'serie de documentos', 'timbrado numeracion', 'impresora', 'qz tray', 'arqueo'],
  },
  {
    screen_key: 'configuracion/pos',
    titulo: 'Configuración POS (tipo de punto de venta, layout e impresora)',
    ruta_url: '/configuracion',
    breadcrumb: ['Menú', 'Configuración', 'Puntos de Venta', 'Configuración POS'],
    descripcion:
      'Acá se elige el TIPO de punto de venta de cada caja: POS RETAIL (pantalla completa, para venta rápida con pantalla táctil) o POS ADMIN (con menú lateral). La configuración es POR CAJA: primero se elige la caja arriba y después se ajusta. También se define el modo de visualización (pantalla completa, layout grilla / lista / categorías, tamaño de tarjetas, vista inicial), qué se muestra de cada producto (imagen, precio, stock), la posición de las categorías y del teclado numérico, la moneda por defecto del POS Retail y la impresora. Ruta exacta: Configuración → Puntos de Venta → Configuración POS. NO está dentro del detalle de la sucursal.',
    aliases: ['configuracion pos', 'tipo de pos', 'pos retail', 'pos admin', 'cambiar tipo de pos', 'que pos voy a usar', 'layout del pos', 'pantalla completa', 'teclado numerico', 'impresora pos', 'grilla', 'tamaño de tarjetas'],
  },
  {
    screen_key: 'configuracion/usuarios-permisos',
    titulo: 'Usuarios, Perfiles y Permisos',
    ruta_url: '/configuracion?tab=usuarios',
    breadcrumb: ['Menú', 'Configuración', 'Usuarios y Permisos', 'Usuarios'],
    descripcion: 'Configuración › Usuarios y Permisos › Usuarios (alta, asignación a sucursal/caja, multi-empresa) y › Perfiles y Roles (perfiles SISTEMA vs EMPRESA, editor de permisos por módulo y acciones LEER/CREAR/EDITAR/ELIMINAR/PROCESAR).',
    aliases: ['usuario', 'perfil', 'rol', 'permiso', 'supervisor', 'pin', 'acceso', 'roles'],
  },
  {
    screen_key: 'configuracion/facturacion/monedas-metodos-pago',
    titulo: 'Monedas, Cotizaciones y Métodos de Pago',
    ruta_url: '/configuracion?tab=monedas',
    breadcrumb: ['Menú', 'Configuración', 'Facturación', 'Monedas'],
    descripcion: 'Configuración › Facturación › Monedas (monedas habilitadas, cotizaciones compra/venta y tipo de cambio contable) y Configuración › Facturación › Métodos de Pago (métodos SIFEN: efectivo, transferencia, cheque, tarjeta… con caja/banco asociado).',
    aliases: ['moneda', 'cotizacion', 'cotización', 'tipo de cambio', 'usd', 'gs', 'metodo de pago', 'método de pago', 'efectivo', 'tarjeta', 'transferencia'],
  },

  // ---------- Módulos operativos (entradas raíz para guías genéricas) ----------
  {
    screen_key: 'ventas/facturacion',
    titulo: 'Facturación (guía general)',
    ruta_url: '/ventas',
    breadcrumb: ['Menú', 'Ventas', 'Facturación'],
    descripcion: 'Guía completa del módulo de facturación: emisión, anulación, notas de crédito/débito, envío a SIFEN, KuDE, reenvío por email/WhatsApp.',
    aliases: ['factura', 'facturar', 'sifen', 'kude', 'anular factura'],
  },
  {
    screen_key: 'cobros/finanzas',
    titulo: 'Cobros y Finanzas (guía general)',
    ruta_url: '/cobros',
    breadcrumb: ['Menú', 'Cobranzas', 'Cobros'],
    descripcion: 'Flujo de cobranza: recibos, cobros multi-factura, medios de pago, asientos automáticos, cheques recibidos, panel del cobrador.',
    aliases: ['cobro', 'cobranza', 'recibo', 'pago de cliente', 'cobrador'],
  },
  {
    screen_key: 'tesoreria/bancos',
    titulo: 'Tesorería y Bancos (guía general)',
    ruta_url: '/tesoreria-bancos',
    breadcrumb: ['Menú', 'Tesorería'],
    descripcion: 'Pantalla "Tesorería y Bancos" (ítem Tesorería del menú) con pestañas: Cuentas y Saldos, Movimientos, Cheques, Transferencias, Reportes, Conciliación. La caja del día (abrir/cerrar caja, entradas y salidas) NO está acá: está en Finanzas › pestaña Caja del Día.',
    aliases: ['banco', 'tesoreria', 'tesorería', 'cuenta bancaria', 'conciliacion', 'cheque'],
  },
  {
    screen_key: 'contactos',
    titulo: 'Contactos (guía general)',
    ruta_url: '/contactos',
    breadcrumb: ['Menú', 'Contactos'],
    descripcion: 'Mantenimiento de clientes y proveedores: datos fiscales SIFEN, listas de precios, condiciones de crédito.',
    aliases: ['cliente', 'proveedor', 'contacto'],
  },
  {
    screen_key: 'compras',
    titulo: 'Compras (guía general)',
    ruta_url: '/compras',
    breadcrumb: ['Menú', 'Compras'],
    descripcion: 'Flujo de compras: órdenes, recepciones, facturas de compra, pagos a proveedor.',
    aliases: ['compra', 'orden de compra', 'recepcion', 'pago proveedor'],
  },
  {
    screen_key: 'contabilidad',
    titulo: 'Contabilidad (guía general)',
    ruta_url: '/contabilidad',
    breadcrumb: ['Menú', 'Contabilidad'],
    descripcion: 'Asientos contables automáticos y manuales, plan de cuentas, libro diario, mapeo de cuentas.',
    aliases: ['contabilidad', 'asiento', 'libro diario', 'plan de cuentas', 'mapeo'],
  },
  {
    screen_key: 'importaciones',
    titulo: 'Importaciones (guía general)',
    ruta_url: '/importaciones',
    breadcrumb: ['Menú', 'Importaciones'],
    descripcion: 'Módulo de importaciones: embarques y despacho aduanero con prorrateo de fletes/tributos (en v1 solo perfil AUTOS). Solo aparece si el plan incluye el módulo.',
    aliases: ['importacion', 'importación', 'embarque', 'despacho aduanero', 'aduana'],
  },

  // ---------- IA ----------
  {
    screen_key: 'iaDashboard',
    titulo: 'IA Dashboard (Novasis AI)',
    ruta_url: '/ai-dashboard',
    breadcrumb: ['Menú', 'IA Dashboard'],
    descripcion: 'Dashboard analítico generado por IA con métricas, alertas, timeline, predicciones y chat con datos del negocio. Para preguntas sobre montos, ventas, deuda, etc.',
  },

  // ---------- Configuración ----------
  {
    screen_key: 'configuracion',
    titulo: 'Configuración',
    ruta_url: '/configuracion',
    breadcrumb: ['Menú', 'Configuración'],
    descripcion: 'Configuración general de la empresa: datos fiscales, certificado SIFEN, módulos activos, usuarios, permisos, integraciones (Bancard, Marangatu, IA).',
  },
  {
    screen_key: 'configuracion/ayudaIa',
    titulo: 'Configuración Ayuda IA',
    ruta_url: '/suscripciones',
    breadcrumb: ['Menú', 'Suscripciones', 'pestaña Consumo IA'],
    descripcion: 'Configurar el proveedor LLM (Anthropic, OpenAI u Ollama local) y el modelo que usa NovaIA (el asistente de ayuda), y ver su consumo. Es global y solo la administra la empresa holding, en Suscripciones › pestaña Consumo IA (ya no está en Configuración). Acá también se dispara la re-indexación de la base de conocimiento.',
  },
];

export function catalogoComoDocs() {
  return CATALOGO.map((c) => {
    const aliasLine =
      c.aliases && c.aliases.length > 0
        ? `\n\n**También conocido como:** ${c.aliases.join(', ')}`
        : '';
    const contenido_md = `# ${c.titulo}

**Ubicación en el menú:** ${c.breadcrumb.join(' › ')}
**Ruta interna:** \`${c.ruta_url}\`

${c.descripcion}${aliasLine}`;
    return {
      fuente: 'catalogo' as const,
      origen_path: null,
      screen_key: c.screen_key,
      titulo: c.titulo,
      contenido_md,
      // Hash del contenido completo. Antes sólo cambiaba con los aliases, así que
      // corregir un breadcrumb o una descripción no se re-ingestaba nunca y la
      // base seguía sirviendo rutas viejas (ej. "Menú › Stock › Inventario").
      // Largo fijo: la columna es varchar(64) y el formato anterior (screen_key +
      // todos los aliases) la desbordaba, así que esas entradas nunca se insertaban.
      version_hash: `catalogo:v3:${createHash('sha256').update(`${c.screen_key}\n${contenido_md}`).digest('hex').slice(0, 40)}`,
    };
  });
}

/**
 * Mapa derivado del catálogo, consumido por el frontend para resolver
 * `pathname → screen_key`. Una sola fuente de verdad: este archivo.
 *
 * - `exactos`: match exacto del pathname (sin trailing slash, sin query).
 * - `prefijos`: si no hay match exacto, se prueba `pathname.startsWith(prefijo)`.
 * - `aliasesPorScreenKey`: términos extra (solo para debug/UI, el retrieval
 *    ya los incluyó en el embedding del documento catálogo).
 */
export interface ScreenMap {
  exactos: Record<string, string>;
  prefijos: Array<[string, string]>;
  aliasesPorScreenKey: Record<string, string[]>;
}

export function buildScreenMap(): ScreenMap {
  const exactos: Record<string, string> = {};
  const aliasesPorScreenKey: Record<string, string[]> = {};
  const prefijosSet = new Map<string, string>(); // primer "/seg" del path → screen_key namespace

  for (const c of CATALOGO) {
    const todas = [c.ruta_url, ...(c.rutas_extra ?? [])];
    for (const r of todas) {
      const clean = normalizarRuta(r);
      if (clean) exactos[clean] = c.screen_key;
    }
    if (c.aliases && c.aliases.length > 0) {
      aliasesPorScreenKey[c.screen_key] = c.aliases;
    }
    // Namespace del screen_key (primer segmento) → ej. "tesoreria/cajas" → "tesoreria".
    // Si la ruta principal comienza con "/<namespace>/...", lo registramos como prefijo
    // para que rutas hijas no mapeadas hereden el namespace (sin perder boost).
    const ns = c.screen_key.split('/')[0];
    const seg0 = primerSegmento(c.ruta_url);
    if (seg0 && !prefijosSet.has(seg0)) {
      prefijosSet.set(seg0, ns);
    }
  }
  const prefijos: Array<[string, string]> = Array.from(prefijosSet.entries());
  return { exactos, prefijos, aliasesPorScreenKey };
}

function normalizarRuta(r: string): string | null {
  if (!r) return null;
  const sinQuery = r.split('?')[0];
  const sinTrailing = sinQuery.replace(/\/+$/, '');
  return sinTrailing || '/';
}

function primerSegmento(r: string): string | null {
  const clean = normalizarRuta(r);
  if (!clean || clean === '/') return null;
  const seg = clean.split('/').filter(Boolean)[0];
  return seg ? `/${seg}` : null;
}
