'use strict';

const RESTCARD_BEHAVIOR_MAP = Object.freeze([
  { area: 'Tarjetas', tables: ['tarjetas', 'tarjetasdetalle'], behavior: 'Emision, estado, vigencia, PIN, saldo de monedero, puntos, descuento inicial/recurrente y limites de credito.' },
  { area: 'Movimientos', tables: ['tarjetasmovtos', 'bitacoramovtos', 'reajustes', 'ultimosvencimientos'], behavior: 'Registro de cargos, abonos, redenciones, ajustes, vencimientos y trazabilidad por usuario/sucursal/folio.' },
  { area: 'Clientes y titulares', tables: ['clientes', 'datosdetitular', 'datosdecompra', 'usuarioscliente'], behavior: 'Cliente comercial, titulares fisicos o morales, compradores autorizados y acceso de clientes.' },
  { area: 'Clasificacion y promociones', tables: ['clasificaciontarjeta', 'webpromociones', 'webdiaspromociones'], behavior: 'Segmentos de tarjeta, descuentos por clasificacion, promociones con vigencia y dias aplicables.' },
  { area: 'Grupos y sucursales', tables: ['grupos', 'gruposdetalles', 'sucursales', 'cambiosucursal'], behavior: 'Agrupacion multisucursal y transferencia/cambio de sucursal de tarjetas.' },
  { area: 'Administracion', tables: ['perfiladmin', 'perfilusuario', 'usuariosadmon', 'configuracion', 'datosadmon', 'tabvariables', 'colorsistema'], behavior: 'Perfiles, usuarios, parametros de sistema, licencia, estacion y apariencia.' },
  { area: 'Bitacoras', tables: ['bitacorasistema', 'bitacoragenerartarjetas', 'entregatarjetas', 'eventosdetarjeta'], behavior: 'Auditoria natural de eventos, generacion/entrega de tarjetas y actividad de sistema.' },
]);

const SOFTRESTAURANT_CARD_AREAS = Object.freeze([
  { area: 'Catalogo de cortesias', menu: 'Operaciones > Cortesias con tarjetas de monedero > Catalogo de cortesias', tables: ['cortesiasmonedero', 'cortesiasmonederodetalle'], behavior: 'Define cortesias, vigencia y productos/cantidades que puede consumir una tarjeta.' },
  { area: 'Administracion de cortesias', menu: 'Operaciones > Cortesias con tarjetas de monedero > Administracion de cortesias', tables: ['cortesiasmonederotarjetas'], behavior: 'Asigna tarjetas a cortesias con estatus y rango de fechas.' },
  { area: 'Monedero por producto', menu: 'Catalogos/Operaciones de monedero', tables: ['productosmonedero', 'monederorangos'], behavior: 'Reglas de acumulacion por producto, area, empresa, dia, horario, porcentaje, multiplo y puntos.' },
  { area: 'Uso en venta', menu: 'Punto de venta / cobro', tables: ['tempnumerostarjetas', 'numerostarjetas', 'tempcheques', 'cheques', 'tempcheqdet', 'cheqdet'], behavior: 'Captura tarjeta, aplica descuentos/cortesias, registra saldo anterior, puntos generados y totales por cuenta.' },
  { area: 'Clientes y saldos', menu: 'Catalogos > Clientes / monedero', tables: ['clientes', 'saldosclientes', 'validahuellamonedero', 'huellaclientes'], behavior: 'Liga tarjeta a cliente, saldo, credito, huella y datos fiscales/contacto.' },
  { area: 'Seguridad', menu: 'Seguridad > Perfiles', tables: ['usuariosperfiles'], behavior: 'Permisos para consultar saldo, abonar monedero, autorizar tarjeta y administrar monitor/cortes.' },
]);

const REPLICATION_CROSSWALK = Object.freeze([
  { restcard: 'tarjetas.numerotarjeta', softrestaurant: 'clientes.tarjetamonedero / cortesiasmonederotarjetas.numerotarjeta / numerostarjetas.numerotarjeta', note: 'Identificador principal de tarjeta.' },
  { restcard: 'tarjetasdetalle.saldomonederoelectronico', softrestaurant: 'saldosclientes / cheques.saldoanteriormonedero', note: 'Saldo monetario y saldo anterior durante consumo.' },
  { restcard: 'tarjetasdetalle.saldopuntoselectronicos', softrestaurant: 'cheques.puntosmonederogenerados / bitacoratarjetacredito.puntos*', note: 'Puntos generados, redimidos o disponibles.' },
  { restcard: 'tarjetasdetalle.desc_inicial, desc_recurrente, aceptadescuento', softrestaurant: 'clientes.descuento / cheques.descuentomonedero / idformadepagoDescuento', note: 'Descuento de monedero aplicado al ticket.' },
  { restcard: 'clasificaciontarjeta.descuento', softrestaurant: 'tipoclientes / tipoclientesPriceList / clientes.idtipocliente', note: 'Segmento comercial de descuento.' },
  { restcard: 'tarjetasmovtos', softrestaurant: 'numerostarjetas, tempnumerostarjetas, cheques, cheqdet', note: 'Movimiento de cargo, abono o redencion asociado a folio.' },
  { restcard: 'webpromociones/webdiaspromociones', softrestaurant: 'productosmonedero/monederorangos', note: 'Promociones y acumulacion por reglas de producto/dia.' },
]);

const RESTCARD_NATIVE_OPTIONS = Object.freeze([
  { menu: 'Catalogos > Clasificacion de tarjetas', tables: ['clasificaciontarjeta'], behavior: 'Alta/edicion de segmentos; filtra F3 y define descuento base.' },
  { menu: 'Catalogos > Tarjetas F3', tables: ['tarjetas', 'tarjetasdetalle', 'entregatarjetas', 'datosdetitular'], behavior: 'Lista activos/suspendidos/cancelados por tipo descuento/puntos; edita descuento, puntos, PIN, saldo, titular y estado.' },
  { menu: 'Catalogos > Sucursales', tables: ['sucursales', 'grupos', 'gruposdetalles'], behavior: 'Contexto grupo-cliente-sucursal usado para generar y mover tarjetas.' },
  { menu: 'Catalogos > Solicitar / Asignar tarjetas', tables: ['bitacoragenerartarjetas', 'entregatarjetas', 'eventosdetarjeta', 'datosdetitular'], behavior: 'Genera folios, marca tarjetas disponibles, registra entrega/asignacion y datos del titular.' },
  { menu: 'Catalogos > Paises / Estados', tables: ['paises', 'estados'], behavior: 'Catalogos usados por datos de titular y domicilio fiscal.' },
  { menu: 'Movimientos > Traspaso saldo F5', tables: ['tarjetasmovtos', 'cambiosucursal'], behavior: 'Mueve saldo/puntos entre tarjetas y deja movimiento trazable.' },
  { menu: 'Movimientos > React/Susp saldo F6', tables: ['tarjetasdetalle', 'eventosdetarjeta'], behavior: 'Suspende/reactiva uso de saldo por tarjeta sin borrar historial.' },
  { menu: 'Movimientos > Cancelar tarjetas F7', tables: ['tarjetasdetalle', 'eventosdetarjeta'], behavior: 'Cancela tarjeta, guarda motivo/usuario y evita uso posterior.' },
  { menu: 'Consultas', tables: ['tarjetas', 'tarjetasdetalle', 'tarjetasmovtos', 'datosdetitular'], behavior: 'Consulta saldos, tarjetas, movimientos y titular sin modificar datos.' },
  { menu: 'Reportes > Saldos/Tarjetas/Movimientos/Solicitud', tables: ['tarjetas', 'tarjetasdetalle', 'tarjetasmovtos', 'bitacoragenerartarjetas', 'entregatarjetas'], behavior: 'Reportes imprimibles del estado operativo del monedero.' },
  { menu: 'Seguridad', tables: ['usuariosadmon', 'usuarioscliente', 'perfiladmin', 'perfilusuario'], behavior: 'Controla usuarios, perfiles y permisos administrativos/cliente.' },
]);

module.exports = {
  RESTCARD_BEHAVIOR_MAP,
  SOFTRESTAURANT_CARD_AREAS,
  REPLICATION_CROSSWALK,
  RESTCARD_NATIVE_OPTIONS,
};
