-- Task #209: Corrigir colunas timestamp sem fuso horário no banco
-- Converte todas as colunas TIMESTAMP WITHOUT TIME ZONE restantes para TIMESTAMPTZ
-- nas tabelas da plataforma OnSMS.
--
-- IDEMPOTENTE: cada ALTER é envolvido em um bloco PL/pgSQL que verifica
-- information_schema antes de executar. Re-rodar este script é seguro.
--
-- USANDO AT TIME ZONE 'America/Sao_Paulo': os valores existentes foram gravados
-- como UTC mas armazenados sem fuso porque a sessão PostgreSQL estava em
-- America/Sao_Paulo (UTC-3). Reinterpretar como 'America/Sao_Paulo' converte e
-- corrige simultaneamente.
--
-- Este arquivo é referência. A lógica de boot está em server/seed.ts.

DO $$
DECLARE cols TEXT[][] := ARRAY[
  ARRAY['campaigns',                    'scheduled_at'],
  ARRAY['campaigns',                    'created_at'],
  ARRAY['campaigns',                    'updated_at'],
  ARRAY['campaigns',                    'sent_to_operator_at'],
  ARRAY['campaigns',                    'report_received_at'],
  ARRAY['campaigns',                    'completed_at'],
  ARRAY['contacts',                     'processed_at'],
  ARRAY['activity_logs',               'created_at'],
  ARRAY['users',                        'lock_until'],
  ARRAY['users',                        'criado_em'],
  ARRAY['users',                        'ultimo_login'],
  ARRAY['api_settings',                'updated_at'],
  ARRAY['api_tokens',                  'last_used_at'],
  ARRAY['api_tokens',                  'created_at'],
  ARRAY['template_presets',            'created_at'],
  ARRAY['template_presets',            'updated_at'],
  ARRAY['credit_transactions',         'created_at'],
  ARRAY['infobip_configs',             'created_at'],
  ARRAY['infobip_configs',             'updated_at'],
  ARRAY['infobip_senders',             'last_used_at'],
  ARRAY['infobip_senders',             'created_at'],
  ARRAY['waba_templates',              'created_at'],
  ARRAY['waba_templates',              'updated_at'],
  ARRAY['waba_messages',               'updated_at'],
  ARRAY['hubspot_alert_config',        'updated_at'],
  ARRAY['hubspot_alert_state',         'last_alerted_at'],
  ARRAY['hubspot_execute_diagnostics', 'received_at'],
  ARRAY['hubspot_pending_dispatch',    'last_attempt_at'],
  ARRAY['hubspot_pending_dispatch',    'queued_at'],
  ARRAY['hubspot_connections',         'token_expires_at'],
  ARRAY['hubspot_connections',         'last_sync_at'],
  ARRAY['hubspot_connections',         'property_scope_skip_notice_at'],
  ARRAY['hubspot_connections',         'created_at'],
  ARRAY['hubspot_timeline_templates',  'registered_at'],
  ARRAY['hubspot_timeline_templates',  'updated_at']
];
r TEXT[];
dt TEXT;
BEGIN
  FOREACH r SLICE 1 IN ARRAY cols LOOP
    SELECT data_type INTO dt
    FROM information_schema.columns
    WHERE table_name = r[1] AND column_name = r[2];
    IF dt = 'timestamp without time zone' THEN
      EXECUTE format(
        'ALTER TABLE %I ALTER COLUMN %I TYPE TIMESTAMPTZ USING %I AT TIME ZONE ''America/Sao_Paulo''',
        r[1], r[2], r[2]
      );
      RAISE NOTICE 'Converted %.% to TIMESTAMPTZ', r[1], r[2];
    END IF;
  END LOOP;
END
$$;
