-- 036: Janela de atendimento por DISPARO (modelo pós-cobrança da Meta, 14/07/2026)
--
-- A janela de atendimento do Agente de IA / Chat passa a ser contada a partir
-- do ENVIO da campanha ao contato (janela de faturamento), não da última
-- resposta dele. ai_conversations.dispatch_sent_at guarda esse momento; a
-- janela é dispatch_sent_at + maxWindowHours. Conversa sem valor (null) é
-- tratada como janela expirada (conservador — nunca envia sem saber o disparo).
--
-- Aplicar manualmente via psql (padrão do projeto):
--   psql "$DATABASE_URL" -f migrations/036_ai_window_por_disparo.sql

ALTER TABLE ai_conversations
  ADD COLUMN IF NOT EXISTS dispatch_sent_at timestamptz;

-- Backfill das conversas existentes: pega o sent_at mais recente do disparo
-- da MESMA campanha para o MESMO contato, em ambas as trilhas. O casamento de
-- telefone tolera o drift do 9º dígito (13 vs 12 dígitos), como na atribuição.

-- Trilha Multi-BM (multibm_messages)
UPDATE ai_conversations c
SET dispatch_sent_at = sub.max_sent_at
FROM (
  SELECT m.campaign_id,
         regexp_replace(m.phone, '\D', '', 'g') AS phone_digits,
         MAX(m.sent_at) AS max_sent_at
  FROM multibm_messages m
  WHERE m.sent_at IS NOT NULL
  GROUP BY m.campaign_id, regexp_replace(m.phone, '\D', '', 'g')
) sub
WHERE c.dispatch_sent_at IS NULL
  AND c.campaign_id = sub.campaign_id
  AND (
    regexp_replace(c.contact_phone, '\D', '', 'g') = sub.phone_digits
    -- variante sem o 9º dígito: 55 + DDD + últimos 8
    OR (LEFT(regexp_replace(c.contact_phone, '\D', '', 'g'), 4)
          = LEFT(sub.phone_digits, 4)
        AND RIGHT(regexp_replace(c.contact_phone, '\D', '', 'g'), 8)
          = RIGHT(sub.phone_digits, 8))
  );

-- Trilha WA OFICIAL (waba_messages)
UPDATE ai_conversations c
SET dispatch_sent_at = sub.max_sent_at
FROM (
  SELECT w.campaign_id,
         regexp_replace(w.phone, '\D', '', 'g') AS phone_digits,
         MAX(w.sent_at) AS max_sent_at
  FROM waba_messages w
  WHERE w.sent_at IS NOT NULL
  GROUP BY w.campaign_id, regexp_replace(w.phone, '\D', '', 'g')
) sub
WHERE c.dispatch_sent_at IS NULL
  AND c.campaign_id = sub.campaign_id
  AND (
    regexp_replace(c.contact_phone, '\D', '', 'g') = sub.phone_digits
    OR (LEFT(regexp_replace(c.contact_phone, '\D', '', 'g'), 4)
          = LEFT(sub.phone_digits, 4)
        AND RIGHT(regexp_replace(c.contact_phone, '\D', '', 'g'), 8)
          = RIGHT(sub.phone_digits, 8))
  );
