-- Enforce at most one active certificate per municipio on MySQL 5.6.
-- Multiple inactive rows remain allowed because NULL values do not collide in a unique key.
UPDATE nfse_certificados current_cert
JOIN (
  SELECT municipio_id, MAX(id) AS keep_id
  FROM nfse_certificados
  WHERE ativo = 1
  GROUP BY municipio_id
) active_cert
  ON active_cert.municipio_id = current_cert.municipio_id
SET current_cert.ativo = 0
WHERE current_cert.ativo = 1
  AND current_cert.id <> active_cert.keep_id;

ALTER TABLE nfse_certificados
  ADD COLUMN ativo_unico TINYINT UNSIGNED NULL AFTER ativo;

UPDATE nfse_certificados
SET ativo_unico = IF(ativo = 1, 1, NULL);

ALTER TABLE nfse_certificados
  ADD UNIQUE KEY uk_nfse_certificados_municipio_ativo_unico
    (municipio_id, ativo_unico);

CREATE TRIGGER trg_nfse_certificados_bi_ativo_unico
BEFORE INSERT ON nfse_certificados
FOR EACH ROW
SET NEW.ativo_unico = IF(NEW.ativo = 1, 1, NULL);

CREATE TRIGGER trg_nfse_certificados_bu_ativo_unico
BEFORE UPDATE ON nfse_certificados
FOR EACH ROW
SET NEW.ativo_unico = IF(NEW.ativo = 1, 1, NULL);
