-- Task #108 — Histórico no HubSpot Timeline.
--
-- A cada disparo (Custom Workflow Action OU drenagem da fila
-- hubspot_pending_dispatch), o sistema publica um Timeline Event no contato
-- HubSpot — feed "Activity" mostra "WhatsApp enviado/falhou/na fila" com
-- template, sender, telefone e link de volta para /admin/hubspot/diagnostics.
--
-- Esta migração é IDEMPOTENTE e segura para rodar mais de uma vez. A operação
-- equivalente já é aplicada por `npm run db:push --force` a partir do schema
-- Drizzle (shared/schema.ts), mas mantemos este SQL para ambientes que
-- aplicam migrations manualmente em ordem.

BEGIN;

-- 1) Switch por conexão para opt-in/out da publicação no Timeline.
--    Default true; o backend força false para conexões manuais (Private App)
--    no POST /api/hubspot/connections — o admin pode forçar true via toggle.
ALTER TABLE hubspot_connections
  ADD COLUMN IF NOT EXISTS timeline_enabled BOOLEAN NOT NULL DEFAULT TRUE;

-- 1b) Backfill: para conexões existentes do tipo "manual" (Private App),
--     desativar Timeline por padrão — esses portais normalmente não têm o app
--     HubSpot instalado, então tentar publicar viraria erro recorrente até o
--     admin desligar manualmente. Conexões "oauth" mantêm o default true.
--     Roda apenas uma vez (a coluna recém-adicionada vai estar com TRUE em
--     toda linha pré-existente; depois deste UPDATE manuais ficam FALSE).
UPDATE hubspot_connections
   SET timeline_enabled = FALSE
 WHERE connection_type = 'manual'
   AND timeline_enabled = TRUE;

-- 2) contactObjectId persistido no item da fila — necessário para o worker
--    drainOnce() conseguir publicar SENT/FAILED no Timeline ao processar.
ALTER TABLE hubspot_pending_dispatch
  ADD COLUMN IF NOT EXISTS contact_object_id VARCHAR(128);

-- 3) Tabela de estado do Event Type Template registrado no HubSpot. Uma linha
--    por appId (HUBSPOT_APP_ID). version é incrementada a cada PATCH para que
--    o admin saiba se o template foi atualizado depois do registro inicial.
CREATE TABLE IF NOT EXISTS hubspot_timeline_templates (
  id              VARCHAR PRIMARY KEY DEFAULT gen_random_uuid(),
  app_id          VARCHAR(64) NOT NULL UNIQUE,
  event_template_id VARCHAR(128) NOT NULL,
  object_type     VARCHAR(32) NOT NULL DEFAULT 'contacts',
  version         INTEGER NOT NULL DEFAULT 1,
  registered_at   TIMESTAMP NOT NULL DEFAULT NOW(),
  updated_at      TIMESTAMP NOT NULL DEFAULT NOW()
);

COMMIT;
