-- Fase 8: paquete prepago de documentos FE y llave por terminal

ALTER TABLE modulos
  ADD COLUMN IF NOT EXISTS precio_por_documento DECIMAL(12,4) NOT NULL DEFAULT 0.0000 AFTER precio_unico,
  ADD COLUMN IF NOT EXISTS requiere_cantidad_documentos TINYINT(1) NOT NULL DEFAULT 0 AFTER tipo_cobro;

UPDATE modulos
SET requiere_cantidad_documentos = 1
WHERE clave = 'facturacion_electronica';

UPDATE metodos_pago
SET codigo_mh = '06'
WHERE LOWER(nombre) LIKE '%sinpe%movil%'
   OR LOWER(nombre) LIKE '%sinpe móvil%'
   OR clave = 'sinpe_movil';

CREATE TABLE IF NOT EXISTS negocio_fe_paquetes (
  id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  negocio_id BIGINT UNSIGNED NOT NULL,
  modulo_id BIGINT UNSIGNED NOT NULL,
  documentos_mes INT UNSIGNED NOT NULL DEFAULT 0,
  documentos_usados INT UNSIGNED NOT NULL DEFAULT 0,
  precio_por_documento DECIMAL(12,4) NOT NULL DEFAULT 0.0000,
  monto_mensual DECIMAL(12,2) NOT NULL DEFAULT 0.00,
  moneda CHAR(3) NOT NULL DEFAULT 'USD',
  periodo_inicio DATE DEFAULT NULL,
  periodo_fin DATE DEFAULT NULL,
  estado ENUM('pendiente','aprobado','activo','agotado','suspendido','cancelado') NOT NULL DEFAULT 'pendiente',
  aprobado_por_usuario_id BIGINT UNSIGNED DEFAULT NULL,
  aprobado_el DATETIME DEFAULT NULL,
  creado DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  actualizado DATETIME DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (id),
  UNIQUE KEY uq_negocio_modulo_periodo (negocio_id, modulo_id, periodo_inicio),
  KEY idx_negocio_fe_paquetes_negocio (negocio_id),
  KEY idx_negocio_fe_paquetes_estado (estado)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

ALTER TABLE fe_api_keys
  ADD COLUMN IF NOT EXISTS negocio_id BIGINT UNSIGNED DEFAULT NULL AFTER id,
  ADD COLUMN IF NOT EXISTS cod_sucursal VARCHAR(3) DEFAULT NULL AFTER negocio_id,
  ADD COLUMN IF NOT EXISTS cod_terminal VARCHAR(5) DEFAULT NULL AFTER cod_sucursal,
  ADD COLUMN IF NOT EXISTS device_hash VARCHAR(128) DEFAULT NULL AFTER cod_terminal,
  ADD COLUMN IF NOT EXISTS primer_uso_en DATETIME DEFAULT NULL AFTER device_hash,
  ADD COLUMN IF NOT EXISTS ultimo_uso_en DATETIME DEFAULT NULL AFTER primer_uso_en,
  ADD COLUMN IF NOT EXISTS bloqueada_en DATETIME DEFAULT NULL AFTER ultimo_uso_en,
  ADD COLUMN IF NOT EXISTS motivo_bloqueo VARCHAR(255) DEFAULT NULL AFTER bloqueada_en;

UPDATE fe_api_keys fak
LEFT JOIN fe_sucursales fs ON fs.id = fak.sucursal_id
SET fak.negocio_id = COALESCE(fak.negocio_id, fak.negocio_id_origen, fs.negocio_id_origen),
    fak.cod_sucursal = COALESCE(fak.cod_sucursal, fs.cod_sucursal),
    fak.cod_terminal = COALESCE(fak.cod_terminal, fs.cod_terminal)
WHERE fak.negocio_id IS NULL OR fak.cod_sucursal IS NULL OR fak.cod_terminal IS NULL;
