-- 079: Black-list de LINKS (12/08/2026)
--
-- Origem: ban do número da BM Diamantes. A Meta recategorizou o template
-- `magicreply2_758730` de UTILITY para MARKETING em 09/08 e baniu o número em
-- 10/08. A forense em produção mostrou o MESMO link encurtado repetido em NOVE
-- lotes (`https://revr.be/s/a813b52a`, lotes OPM240/241/283/284/286/287/291/
-- 294/299) e um segundo link em outros três (`https://revr.be/a5NMvy`,
-- OPM248/250/254). A marca da Meta cai sobre o LINK, não só sobre o texto.
--
-- Desde agora, recategorização detectada pelo guard alimenta esta tabela
-- sozinha e nenhuma campanha nova consegue reaproveitar o link marcado.
-- Enforcement GLOBAL; owner_user_id só decide QUEM VÊ (admin vê tudo, o
-- cliente afetado vê os dele, os demais não veem nada).

BEGIN;

CREATE TABLE IF NOT EXISTS blocked_links (
  id                 VARCHAR PRIMARY KEY DEFAULT gen_random_uuid(),
  url_canonical      VARCHAR(600) NOT NULL,
  url_original       VARCHAR(600) NOT NULL,
  tipo               VARCHAR(20)  NOT NULL DEFAULT 'encurtado',
  origem             VARCHAR(30)  NOT NULL DEFAULT 'auto_recategorizacao',
  owner_user_id      VARCHAR REFERENCES users(id) ON DELETE SET NULL,
  bm_name            VARCHAR(160),
  template_name      VARCHAR(160),
  reason             VARCHAR(300),
  created_at         TIMESTAMPTZ DEFAULT NOW(),
  removed_at         TIMESTAMPTZ,
  removed_by_user_id VARCHAR REFERENCES users(id) ON DELETE SET NULL,
  CONSTRAINT blocked_links_canonical_uniq UNIQUE (url_canonical)
);

-- Seed do incidente: os dois links do magicreply2_758730 (colhidos da
-- produção). Canônico = host sem www + path sem barra final (canonicalizeLink
-- em server/blockedLinks.ts). Idempotente.
INSERT INTO blocked_links (url_canonical, url_original, tipo, origem, owner_user_id, bm_name, template_name, reason)
SELECT v.canonical, v.original, 'encurtado', 'auto_recategorizacao',
       (SELECT id FROM users WHERE id = 'ecffaeaa-7fda-4b51-8dd3-35009d5603f4'),
       'Diamantes', 'magicreply2_758730',
       'Template recategorizado UTILITY→MARKETING em 09/08/2026; número banido em 10/08.'
FROM (VALUES
  ('revr.be/s/a813b52a', 'https://revr.be/s/a813b52a'),
  ('revr.be/a5NMvy',     'https://revr.be/a5NMvy')
) AS v(canonical, original)
ON CONFLICT (url_canonical) DO NOTHING;

COMMIT;
