-- Compositor IA (campanhas) — reescrita de texto bruto em copy + distribuição
-- automática pelos placeholders {{1}}..{{N}} de templates Utility.
-- Aplicado manualmente via psql (db:push interativo trava com tabelas novas —
-- ver .agents/memory/db-push-rename-prompt.md). Espelha shared/schema.ts.

-- 1) Config singleton do Compositor — provider/modelo de texto plugáveis +
--    textos das 3 personas editáveis pelo admin (o texto NUNCA trafega pelo
--    client; o cliente só escolhe entre formal/persuasivo/neutro).
CREATE TABLE IF NOT EXISTS compositor_config (
  key                 varchar(32) PRIMARY KEY DEFAULT 'default',
  text_provider       varchar(20) NOT NULL DEFAULT 'gemini',
  text_model          varchar(80) NOT NULL DEFAULT 'gemini-2.5-flash',
  persona_formal      text NOT NULL DEFAULT 'Escreva em tom FORMAL e respeitoso: frases completas, vocabulário profissional, sem gírias, sem emojis e sem exclamações. Trate o destinatário com cortesia (ex.: "Prezado(a) cliente").',
  persona_persuasivo  text NOT NULL DEFAULT 'Escreva em tom PERSUASIVO, porém honesto e informativo: destaque o benefício concreto da informação para o destinatário, use verbos de ação e frases diretas. Sem promessas, sem ofertas e sem pressão comercial.',
  persona_neutro      text NOT NULL DEFAULT 'Escreva em tom NEUTRO e objetivo: informe com clareza, frases curtas e diretas, sem floreios, sem emojis e sem apelos.',
  updated_at          timestamptz NOT NULL DEFAULT now()
);

-- 2) Termos proibidos (blacklist configurável pelo admin) — compartilhada entre
--    Gerador de Templates, Compositor IA e auditoria de salvamento de campanha.
--    A coluna chama-se `term` DE PROPÓSITO: o SKIP_KEYS do filtro global de
--    palavras (server/lib/blocklist.ts) já isenta "term" da reescrita de
--    respostas, então o admin vê o termo real no painel.
CREATE TABLE IF NOT EXISTS prohibited_terms (
  id          varchar PRIMARY KEY DEFAULT gen_random_uuid(),
  term        text NOT NULL,
  active      boolean NOT NULL DEFAULT true,
  created_at  timestamptz DEFAULT now()
);

-- Unicidade case-insensitive (o CRUD admin também checa, isto é a garantia final).
CREATE UNIQUE INDEX IF NOT EXISTS prohibited_terms_term_lower_uq
  ON prohibited_terms (lower(term));

-- 3) Seed: os 16 termos do COPY_BLOCKLIST original (server/templateGenerator.ts).
--    Idempotente — não duplica se o termo já existir (case-insensitive).
INSERT INTO prohibited_terms (term)
SELECT seed.t
FROM (VALUES
  ('sua conta'),
  ('conta bancária'),
  ('conta corrente'),
  ('cartão de crédito'),
  ('cartão de débito'),
  ('fatura'),
  ('boleto'),
  ('empréstimo'),
  ('financiamento'),
  ('pix'),
  ('cpf'),
  ('cnpj'),
  ('saldo'),
  ('senha'),
  ('login'),
  ('seu login')
) AS seed(t)
WHERE NOT EXISTS (
  SELECT 1 FROM prohibited_terms p WHERE lower(p.term) = lower(seed.t)
);
