-- 072 — Central de Sinais: fechar o loop com as plataformas de anúncio.
--
-- O pixel do formulário avisa "chegou um lead" e nada mais — a plataforma
-- otimiza para preenchedores. Esta tabela é a fila de sinais server-side
-- (Meta Conversions API, TikTok Events API, Google Ads) que devolve o funil
-- REAL: lead com valor pela nota, qualificado, desqualificado (o sinal
-- negativo que quase ninguém entrega) e convertido com valor em reais.
--
-- UNIQUE (lead_id, plataforma, estagio) = idempotência: cada fato é contado
-- uma vez por plataforma, não importa quantas vezes o gatilho dispare.

ALTER TABLE lead_forms ADD COLUMN IF NOT EXISTS pixel_google varchar(64);

CREATE TABLE IF NOT EXISTS lead_signals (
  id varchar PRIMARY KEY DEFAULT gen_random_uuid(),
  owner_user_id varchar NOT NULL,
  lead_id varchar NOT NULL REFERENCES platform_leads(id) ON DELETE CASCADE,
  form_id varchar,
  plataforma varchar(12) NOT NULL,          -- meta | tiktok | google
  estagio varchar(16) NOT NULL,             -- lead | qualificado | desqualificado | convertido
  event_id varchar(64) NOT NULL,            -- dedupe com o pixel do navegador
  valor numeric(12, 2),
  status varchar(12) NOT NULL DEFAULT 'PENDING',  -- PENDING | SENT | FAILED | SKIPPED
  tentativas integer NOT NULL DEFAULT 0,
  ultimo_erro text,
  created_at timestamptz NOT NULL DEFAULT now(),
  next_attempt_at timestamptz NOT NULL DEFAULT now(),  -- backoff exponencial
  sent_at timestamptz,
  CONSTRAINT lead_signals_uniq UNIQUE (lead_id, plataforma, estagio)
);

CREATE INDEX IF NOT EXISTS lead_signals_pending_idx
  ON lead_signals (status, next_attempt_at) WHERE status = 'PENDING';
