-- Script para migrar/corrigir os IDs dos estabelecimentos
-- Este script verifica e atualiza os establishment_id para corresponder aos IDs originais
-- Execute: sudo -u postgres psql -d maktubia_points -f deploy/migrate-establishment-ids.sql

-- Primeiro, vamos verificar a estrutura atual
\echo '📋 Verificando estrutura atual...'
SELECT 
    establishment_id,
    est_id,
    name,
    qr_code,
    created_at
FROM establishments 
ORDER BY created_at DESC
LIMIT 10;

\echo ''
\echo '🔄 Verificando se est_id contém valores numéricos que devem ser migrados...'

-- Verificar se est_id contém valores numéricos
SELECT 
    est_id,
    CASE 
        WHEN est_id ~ '^[0-9]+$' THEN 'NUMERIC'
        ELSE 'TEXT'
    END as est_id_type,
    COUNT(*) as count
FROM establishments
GROUP BY est_id_type;

\echo ''
\echo '🔧 Opções de migração:'
\echo '1. Se est_id contém valores numéricos, podemos migrar para establishment_id'
\echo '2. Se não, podemos usar a ordem de criação (ROW_NUMBER) baseado em created_at'
\echo ''
\echo '⚠️  ATENÇÃO: Este script vai atualizar os valores de establishment_id!'
\echo '   Certifique-se de fazer backup antes de executar!'
\echo ''

-- Verificar se há valores numéricos no est_id que podem ser migrados
DO $$
DECLARE
    has_numeric_est_id BOOLEAN;
    max_est_id INTEGER;
    max_establishment_id INTEGER;
BEGIN
    -- Verificar se há valores numéricos no est_id
    SELECT EXISTS(
        SELECT 1 FROM establishments 
        WHERE est_id ~ '^[0-9]+$' 
        LIMIT 1
    ) INTO has_numeric_est_id;
    
    IF has_numeric_est_id THEN
        RAISE NOTICE '✅ Encontrados valores numéricos no est_id. Migrando para establishment_id...';
        
        -- Atualizar establishment_id com valores de est_id quando possível
        UPDATE establishments e
        SET establishment_id = CAST(e.est_id AS INTEGER)
        WHERE e.est_id ~ '^[0-9]+$'
        AND CAST(e.est_id AS INTEGER) > 0;
        
        RAISE NOTICE '✅ Migração concluída para registros com est_id numérico';
    ELSE
        RAISE NOTICE 'ℹ️  Não foram encontrados valores numéricos no est_id';
        RAISE NOTICE '   Usando ROW_NUMBER baseado em created_at para atualizar establishment_id...';
        
        -- Usar ROW_NUMBER baseado em created_at para gerar IDs sequenciais
        -- Isso vai gerar IDs como 1, 2, 3... mas ordenados por data de criação
        WITH numbered_establishments 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 = n.new_id
        FROM numbered_establishments n
        WHERE e.est_id = n.est_id;
        
        RAISE NOTICE '✅ establishment_id atualizado usando ordem de criação';
    END IF;
    
    -- Verificar resultado
    SELECT MAX(establishment_id) INTO max_establishment_id FROM establishments;
    RAISE NOTICE '📊 Maior establishment_id após migração: %', max_establishment_id;
END $$;

\echo ''
\echo '📋 Verificando resultado após migração...'
SELECT 
    establishment_id,
    est_id,
    name,
    qr_code,
    created_at
FROM establishments 
ORDER BY created_at DESC
LIMIT 10;

\echo ''
\echo '✅ Migração concluída!'












