-- Crea una tabla de secuencia para asegurar que `pda_maestro.numero_asiento`
-- sea un consecutivo numérico por empresa, sin depender de MAX() sobre pda_maestro.
--
-- Uso recomendado:
-- 1) Ejecuta este script una vez.
-- 2) Desde ese momento, el sistema asignará números consecutivos por empresa.

CREATE TABLE IF NOT EXISTS pda_consecutivo_asientos (
  id_empresa INT NOT NULL,
  ultimo_numero INT NOT NULL DEFAULT 0,
  actualizado_en TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (id_empresa)
) ENGINE=InnoDB;

-- Inicializa la secuencia tomando el máximo existente por empresa.
-- Soporta formatos mixtos: solo dígitos (nuevo) y ASI000123 (anterior).
INSERT INTO pda_consecutivo_asientos (id_empresa, ultimo_numero)
SELECT
  id_empresa,
  COALESCE(MAX(
    CASE
      WHEN numero_asiento REGEXP '^[0-9]+$' THEN CAST(numero_asiento AS UNSIGNED)
      WHEN numero_asiento LIKE 'ASI%' AND SUBSTRING(numero_asiento, 4) REGEXP '^[0-9]+$' THEN CAST(SUBSTRING(numero_asiento, 4) AS UNSIGNED)
      ELSE NULL
    END
  ), 0) AS ultimo
FROM pda_maestro
GROUP BY id_empresa
ON DUPLICATE KEY UPDATE
  ultimo_numero = GREATEST(ultimo_numero, VALUES(ultimo_numero));
