#!/bin/bash

# Script para aplicar migração SQL ao banco SQLite3
# Este script aplica o arquivo SQL gerado pela migração

set -e

SQL_FILE=""
DATABASE="data/yasuc.sqlite3"

# Função para mostrar uso
show_usage() {
    echo "Uso: $0 [arquivo_sql] [banco_dados]"
    echo "  arquivo_sql: Caminho para o arquivo SQL (opcional)"
    echo "  banco_dados: Caminho para o banco SQLite3 (padrão: $DATABASE)"
    echo ""
    echo "Se arquivo_sql não for especificado, usa o mais recente em data/migration_*.sql"
}

# Processar argumentos
if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
    show_usage
    exit 0
fi

if [ -n "$1" ]; then
    SQL_FILE="$1"
fi

if [ -n "$2" ]; then
    DATABASE="$2"
fi

echo "=== Aplicar Migração SQL ==="
echo

# Se não foi especificado arquivo SQL, procurar o mais recente
if [ -z "$SQL_FILE" ]; then
    SQL_FILE=$(ls -t data/migration_*.sql 2>/dev/null | head -1)
    
    if [ -n "$SQL_FILE" ]; then
        echo "Usando arquivo SQL mais recente: $SQL_FILE"
    else
        echo "Nenhum arquivo de migração encontrado em data/migration_*.sql"
        echo "Execute primeiro: scripts/migrate-to-sql.sh"
        exit 1
    fi
fi

# Verificar se o arquivo SQL existe
if [ ! -f "$SQL_FILE" ]; then
    echo "Arquivo SQL não encontrado: $SQL_FILE"
    exit 1
fi

echo "Arquivo SQL: $SQL_FILE"
echo "Banco de dados: $DATABASE"
echo

# Verificar se o banco SQLite3 existe
if [ ! -f "$DATABASE" ]; then
    echo "Banco SQLite3 não encontrado. Criando novo banco..."
    
    # Criar diretório se não existir
    mkdir -p "$(dirname "$DATABASE")"
    
    # Criar banco vazio
    touch "$DATABASE"
    echo "Banco SQLite3 criado: $DATABASE"
fi

# Verificar se sqlite3 está disponível
if ! command -v sqlite3 &> /dev/null; then
    echo "SQLite3 não encontrado. Instale o SQLite3 para aplicar a migração."
    echo "Ubuntu/Debian: sudo apt-get install sqlite3"
    echo "CentOS/RHEL: sudo yum install sqlite"
    echo "macOS: brew install sqlite"
    exit 1
fi

echo "SQLite3 encontrado, aplicando migração..."

# Fazer backup do banco atual se existir e não estiver vazio
if [ -f "$DATABASE" ] && [ -s "$DATABASE" ]; then
    BACKUP_FILE="${DATABASE}.backup.$(date +%Y%m%d_%H%M%S)"
    cp "$DATABASE" "$BACKUP_FILE"
    echo "Backup criado: $BACKUP_FILE"
fi

# Aplicar migração
echo "Aplicando migração..."
sqlite3 "$DATABASE" < "$SQL_FILE"

if [ $? -eq 0 ]; then
    echo
    echo "=== Migração aplicada com sucesso! ==="
    echo
    
    # Verificar resultado
    echo "Resultado da migração:"
    sqlite3 "$DATABASE" "SELECT COUNT(*) as total_pastes, SUM(LENGTH(content)) as total_size FROM pastes;"
    
    echo
    echo "Para verificar alguns pastes migrados:"
    echo "sqlite3 $DATABASE \"SELECT short_id, substr(content, 1, 50) FROM pastes LIMIT 5;\""
    
    echo
    echo "Para iniciar o servidor com os dados migrados:"
    echo "./yasuc -db $DATABASE -port 8080 -addr 127.0.0.1"
else
    echo "Erro ao aplicar migração."
    exit 1
fi 