/**
 * Quién pregunta, resuelto por el servidor (nunca por el modelo ni por el body).
 * Ver docs/plan-agente-soporte.md §4.
 */
export interface Sesion {
  usuarioId: string;
  username: string;
  nombre: string;
  /** Empresa efectiva: empresa_id_actual ?? empresa_id, igual que el ERP. */
  empresaId: string;
  empresaRuc: string | null;
  empresaRazonSocial: string | null;
  empresaTipo: string | null;
  isSuperadmin: boolean;
  /** superadmin, holding o reseller: ve todas las sucursales (src/utils/acceso-elevado.ts del ERP). */
  accesoElevado: boolean;
  /** Códigos de privilegio efectivos (perfil + plan, o superadmin + plan). */
  privilegios: ReadonlySet<string>;
  /**
   * Alcance por sucursal (src/utils/alcance-sucursal.ts del ERP); null = sin restricción.
   * Los documentos fiscales se filtran por establecimiento; las alertas, por sucursal.
   */
  alcance: { sucursalIds: readonly string[]; establecimientos: readonly string[] } | null;
  /** Superadmin de la empresa holding (Novasis): ve el reporte global. */
  esNovasis: boolean;
}

export interface FilaSesionUsuario {
  id: string;
  username: string | null;
  nombres: string | null;
  apellidos: string | null;
  active: boolean | null;
  estado: string | null;
  is_superadmin: boolean;
  empresa_id_original: string;
  empresa_id_actual: string | null;
  empresa_id: string;
  empresa_ruc: string | null;
  empresa_razon_social: string | null;
  empresa_tipo: string | null;
}

/** Privilegio del módulo SOPORTE_IA del ERP (seguridad.seed-data.ts, migración 20261024200000_soporte_ia_modulo). */
export const PRIVILEGIO_SOPORTE = 'SOP_IA_USAR';

export const soporteHabilitado = (sesion: Pick<Sesion, 'privilegios'>): boolean =>
  sesion.privilegios.has(PRIVILEGIO_SOPORTE);
