'use strict';

const PERMISSIONS = [
  ['dashboard.view', 'dashboard', 'Ver tablero principal', 'low'],
  ['ventas.view', 'ventas', 'Ver datos de ventas leidos desde SoftRestaurant', 'medium'],
  ['ventas.export', 'ventas', 'Exportar datos de ventas', 'medium'],
  ['reportes.view', 'reportes', 'Ver reportes', 'low'],
  ['reportes.export', 'reportes', 'Exportar reportes', 'medium'],
  ['productos.view', 'productos', 'Ver productos', 'low'],
  ['productos.edit_controlled', 'productos', 'Editar catalogos de forma controlada', 'high'],
  ['inventario.view', 'inventario', 'Ver inventario', 'low'],
  ['inventario.sync.view', 'inventario', 'Ver sincronizacion de inventario', 'medium'],
  ['inventario.adjust_controlled', 'inventario', 'Ajustes controlados de inventario', 'high'],
  ['compras.view', 'compras', 'Ver compras', 'low'],
  ['compras.sync.view', 'compras', 'Ver sincronizacion de compras', 'medium'],
  ['clientes.view', 'clientes', 'Ver clientes configurados', 'low'],
  ['sucursales.view', 'sucursales', 'Ver sucursales', 'low'],
  ['sucursales.manage', 'sucursales', 'Administrar sucursales', 'high'],
  ['autofactura.view', 'autofactura', 'Ver autofactura', 'low'],
  ['autofactura.configure', 'autofactura', 'Configurar autofactura', 'high'],
  ['autofactura.qr.view', 'autofactura', 'Ver QR de autofactura', 'low'],
  ['autofactura.qr.configure', 'autofactura', 'Configurar QR de autofactura', 'high'],
  ['billing.view', 'billing', 'Ver billing', 'medium'],
  ['billing.configure', 'billing', 'Configurar billing', 'high'],
  ['billing.micfdi.admin', 'billing', 'Administrar MICFDI', 'critical'],
  ['billing.real_stamp.controlled', 'billing', 'Timbrado real controlado', 'critical'],
  ['cloud.sync.view', 'cloud', 'Ver sincronizacion Cloud', 'medium'],
  ['cloud.sync.manage', 'cloud', 'Administrar sincronizacion Cloud', 'high'],
  ['cloud.commands.view', 'cloud', 'Ver comandos Cloud', 'medium'],
  ['cloud.commands.send', 'cloud', 'Enviar comandos Cloud', 'critical'],
  ['connectors.view', 'connectors', 'Ver conectores', 'medium'],
  ['connectors.manage', 'connectors', 'Administrar conectores', 'high'],
  ['softrestaurant.read', 'softrestaurant', 'Lectura SoftRestaurant', 'medium'],
  ['softrestaurant.write_controlled', 'softrestaurant', 'Escritura controlada SoftRestaurant', 'critical'],
  ['diagnostics.view', 'diagnostics', 'Ver diagnosticos', 'medium'],
  ['logs.view', 'logs', 'Ver logs', 'high'],
  ['config.view', 'config', 'Ver configuracion', 'medium'],
  ['config.edit', 'config', 'Editar configuracion', 'high'],
  ['security.users.view', 'security', 'Ver usuarios', 'high'],
  ['security.users.manage', 'security', 'Administrar usuarios', 'critical'],
  ['security.profiles.view', 'security', 'Ver perfiles', 'high'],
  ['security.profiles.manage', 'security', 'Administrar perfiles', 'critical'],
  ['support.remote.view', 'support', 'Ver soporte remoto', 'high'],
  ['support.remote.manage', 'support', 'Administrar soporte remoto', 'critical'],
  ['engineering.access', 'support', 'Acceso a Arkhon Engineering', 'critical'],
].map(([code, module, description, risk_level]) => ({
  id: code,
  code,
  module,
  label: description,
  description,
  risk_level,
  sensitivity: risk_level,
  created_at: '2026-06-24T00:00:00.000Z',
}));

const ALL = PERMISSIONS
  .map((item) => item.code)
  .filter((code) => code !== 'engineering.access');

const TEMPLATE_PERMISSIONS = {
  owner: ALL,
  gerente: [
    'dashboard.view',
    'ventas.view',
    'reportes.view',
    'productos.view',
    'inventario.view',
    'compras.view',
    'autofactura.view',
    'diagnostics.view',
    'softrestaurant.read',
  ],
  auxiliar: [
    'dashboard.view',
    'ventas.view',
    'autofactura.qr.view',
  ],
  contador: [
    'reportes.view',
    'reportes.export',
    'billing.view',
    'autofactura.view',
  ],
  soporte_arkhon: [
    'diagnostics.view',
    'logs.view',
    'connectors.view',
    'support.remote.view',
    'engineering.access',
  ],
  solo_lectura: [
    'dashboard.view',
    'reportes.view',
  ],
};

const PROFILE_TEMPLATES = [
  ['owner', 'Owner / Administrador', 'Administrador total del Monitor', true],
  ['gerente', 'Gerente', 'Operacion y reportes sin permisos sensibles', false],
  ['auxiliar', 'Auxiliar', 'Acceso operativo minimo y QR', false],
  ['contador', 'Contador', 'Reportes y billing de consulta', false],
  ['soporte_arkhon', 'Soporte ARKHON', 'Diagnostico tecnico sin timbrado real', false],
  ['solo_lectura', 'Solo lectura', 'Consulta basica', false],
].map(([id, name, description, is_default]) => ({
  id,
  tenant_id: null,
  branch_id: null,
  name,
  description,
  is_system_template: true,
  is_default,
  permission_codes: TEMPLATE_PERMISSIONS[id],
  created_at: '2026-06-24T00:00:00.000Z',
  updated_at: '2026-06-24T00:00:00.000Z',
}));

function permissionMap(codes) {
  const out = {};
  for (const code of codes || []) out[code] = true;
  return out;
}

function templateForRole(role) {
  const clean = String(role || '').toLowerCase();
  const legacyMap = {
    dueno: 'owner',
    admin: 'owner',
    owner: 'owner',
    administrador: 'owner',
    aux: 'auxiliar',
    auxiliar: 'auxiliar',
    aux_contable: 'auxiliar',
    contador: 'contador',
    gerente: 'gerente',
  };
  if (legacyMap[clean]) return legacyMap[clean];
  if (clean.includes('soporte')) return 'soporte_arkhon';
  return 'solo_lectura';
}

module.exports = {
  PERMISSIONS,
  PROFILE_TEMPLATES,
  TEMPLATE_PERMISSIONS,
  permissionMap,
  templateForRole,
};
