-- ============================================================
-- 059 — F5/E3: custo de mídia por campanha (o outro lado do ROI)
-- ============================================================
-- Snapshot DIÁRIO por campanha, com upsert idempotente: reprocessar o
-- mesmo dia não duplica. A plataforma reescreve números dentro da janela
-- de atribuição, então o snapshot precisa ser atualizável, não append.
-- ============================================================

CREATE TABLE IF NOT EXISTS ad_spend_snapshots (
  id             bigserial PRIMARY KEY,
  owner_user_id  varchar NOT NULL REFERENCES users(id) ON DELETE CASCADE,
  platform       varchar(10) NOT NULL,
  campaign_ref   varchar(120) NOT NULL,
  campaign_name  varchar(200),
  date           varchar(10) NOT NULL,
  spend          numeric(12,2) NOT NULL DEFAULT 0,
  impressions    integer NOT NULL DEFAULT 0,
  clicks         integer NOT NULL DEFAULT 0,
  created_at     timestamptz DEFAULT now(),
  updated_at     timestamptz DEFAULT now()
);

DO $$
BEGIN
  IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'ad_spend_owner_plat_camp_date_uniq') THEN
    ALTER TABLE ad_spend_snapshots
      ADD CONSTRAINT ad_spend_owner_plat_camp_date_uniq
      UNIQUE (owner_user_id, platform, campaign_ref, date);
  END IF;
END $$;

CREATE INDEX IF NOT EXISTS idx_ad_spend_owner_date ON ad_spend_snapshots (owner_user_id, date);

-- F5/E6 — registro de origem endurecido: base legal, fornecedor (quando a
-- lista foi adquirida), IP de quem declarou e versão dos termos aceitos.
-- Aditivo: lotes antigos permanecem válidos com esses campos nulos.
ALTER TABLE import_batches
  ADD COLUMN IF NOT EXISTS base_legal varchar(24),
  ADD COLUMN IF NOT EXISTS fornecedor varchar(200),
  ADD COLUMN IF NOT EXISTS declarante_ip varchar(64),
  ADD COLUMN IF NOT EXISTS versao_termos varchar(40);
