-- Task #208: Correção de registros sent_at para ambientes que rodaram a migration
-- 006 com USING UTC (versão anterior) em vez de USING 'America/Sao_Paulo'.
--
-- RUNBOOK — QUANDO USAR:
--   CAMINHO NORMAL:  migration 006 (USING 'America/Sao_Paulo') já corrige o tipo
--                   e os dados no boot. NÃO execute este script nesses ambientes.
--   CAMINHO RECOVERY: apenas se a coluna já é TIMESTAMPTZ e os timestamps históricos
--                   ainda estão 3 horas adiantados (migration 006 foi aplicada com
--                   USING UTC — versão incorreta anterior).
--
-- CUTOFF (recomendado): ajuste a variável abaixo para a data/hora em que a migration
-- 006 correta foi aplicada. Linhas inseridas após esse momento já estão corretas e
-- NÃO devem receber +3h. O padrão conservador de NOW() - INTERVAL '3 hours' protege
-- linhas recentes, mas pode não ser suficiente em ambientes com muitos dados novos.
-- Prefira usar a rota admin POST /api/admin/fix-sent-at-utc?confirm=true&cutoffDate=<ISO>
-- que suporta cutoffDate explícito com preview via dryRun=1.
--
-- IDEMPOTÊNCIA: Controlada pela tabela onsms_data_migrations. O script só
-- executa os UPDATEs uma vez. Re-execuções são bloqueadas pelo INSERT com
-- ON CONFLICT DO NOTHING seguido de verificação.

BEGIN;

CREATE TABLE IF NOT EXISTS onsms_data_migrations (
  key varchar(128) PRIMARY KEY,
  applied_at timestamptz NOT NULL DEFAULT now()
);

DO $$
DECLARE
  -- Ajuste este valor para a data/hora em que a migration 006 correta foi aplicada.
  -- Padrão conservador: protege linhas inseridas nas últimas 3 horas.
  v_cutoff timestamptz := NOW() - INTERVAL '3 hours';
BEGIN
  IF NOT EXISTS (
    SELECT 1 FROM onsms_data_migrations WHERE key = 'fix-sent-at-utc-v1'
  ) THEN

    UPDATE waba_messages
    SET sent_at = sent_at + INTERVAL '3 hours'
    WHERE sent_at IS NOT NULL
      AND sent_at < v_cutoff;

    UPDATE hubspot_pending_dispatch
    SET sent_at = sent_at + INTERVAL '3 hours'
    WHERE sent_at IS NOT NULL
      AND sent_at < v_cutoff;

    INSERT INTO onsms_data_migrations (key) VALUES ('fix-sent-at-utc-v1')
    ON CONFLICT (key) DO NOTHING;

    RAISE NOTICE 'fix-sent-at-utc-v1 aplicado com sucesso (cutoff: %).', v_cutoff;
  ELSE
    RAISE NOTICE 'fix-sent-at-utc-v1 já foi aplicado anteriormente — nenhuma alteração feita.';
  END IF;
END;
$$;

COMMIT;
