-- Script para recuperar os IDs originais dos estabelecimentos a partir de foreign keys
-- Este script verifica outras tabelas que referenciam establishments para recuperar os IDs originais
-- Execute: sudo -u postgres psql -d maktubia_points -f deploy/fix-establishment-ids-from-foreign-keys.sql

\echo '🔍 Verificando tabelas que referenciam establishments...'

-- Verificar se há foreign keys em outras tabelas
SELECT 
    tc.table_name,
    kcu.column_name,
    ccu.table_name AS foreign_table_name,
    ccu.column_name AS foreign_column_name
FROM information_schema.table_constraints AS tc
JOIN information_schema.key_column_usage AS kcu
    ON tc.constraint_name = kcu.constraint_name
JOIN information_schema.constraint_column_usage AS ccu
    ON ccu.constraint_name = tc.constraint_name
WHERE tc.constraint_type = 'FOREIGN KEY'
    AND ccu.table_name = 'establishments';

\echo ''
\echo '🔍 Verificando valores de establishment_id em purchases...'
SELECT 
    establishment_id,
    COUNT(*) as count
FROM purchases
WHERE establishment_id IS NOT NULL
GROUP BY establishment_id
ORDER BY establishment_id DESC
LIMIT 10;

\echo ''
\echo '🔍 Verificando valores de est_id em campaigns...'
SELECT 
    est_id,
    COUNT(*) as count
FROM campaigns
WHERE est_id IS NOT NULL
GROUP BY est_id
ORDER BY est_id DESC
LIMIT 10;

\echo ''
\echo '🔄 Tentando recuperar IDs originais...'

-- Se purchases tem establishment_id, podemos usar esses valores
-- Mas primeiro precisamos verificar se há uma relação entre est_id e os valores esperados

-- Opção 1: Se houver uma coluna que tenha os IDs originais, migrar
-- Por enquanto, vamos usar a abordagem de ROW_NUMBER baseado em created_at DESC
-- para gerar IDs altos para os mais recentes

\echo '📝 Atualizando establishment_id usando ordem de criação (mais recente = maior ID)...'

-- Primeiro, vamos verificar quantos registros temos
DO $$
DECLARE
    total_count INTEGER;
    max_id INTEGER;
BEGIN
    SELECT COUNT(*) INTO total_count FROM establishments;
    RAISE NOTICE '📊 Total de estabelecimentos: %', total_count;
    
    -- Atualizar usando ROW_NUMBER baseado em created_at DESC
    -- Isso fará com que o registro mais recente tenha o maior ID
    WITH numbered AS (
        SELECT 
            est_id,
            ROW_NUMBER() OVER (ORDER BY created_at DESC, est_id) as new_id
        FROM establishments
    )
    UPDATE establishments e
    SET establishment_id = (SELECT new_id FROM numbered n WHERE n.est_id = e.est_id);
    
    SELECT MAX(establishment_id) INTO max_id FROM establishments;
    RAISE NOTICE '✅ establishment_id atualizados. Maior ID: %', max_id;
    
    -- Atualizar a sequência
    PERFORM setval('establishments_establishment_id_seq', max_id);
    RAISE NOTICE '✅ Sequência atualizada para: %', max_id;
END $$;

\echo ''
\echo '📋 Resultado final:'
SELECT 
    establishment_id,
    est_id,
    name,
    qr_code,
    created_at
FROM establishments 
ORDER BY created_at DESC
LIMIT 10;

\echo ''
\echo '✅ Processo concluído!'
\echo ''
\echo '⚠️  NOTA: Se os IDs esperados (208, 104, etc.) estiverem em outra fonte,'
\echo '   você precisará atualizar manualmente ou usar uma migração específica.'












