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

param(
    [string]$SqlFile = "",
    [string]$Database = "data/yasuc.sqlite3"
)

Write-Host "=== Aplicar Migração SQL ===" -ForegroundColor Green
Write-Host ""

# Se não foi especificado arquivo SQL, procurar o mais recente
if ($SqlFile -eq "") {
    $latestMigration = Get-ChildItem "data/migration_*.sql" | Sort-Object LastWriteTime -Descending | Select-Object -First 1
    
    if ($latestMigration) {
        $SqlFile = $latestMigration.FullName
        Write-Host "Usando arquivo SQL mais recente: $SqlFile" -ForegroundColor Yellow
    } else {
        Write-Host "Nenhum arquivo de migração encontrado em data/migration_*.sql" -ForegroundColor Red
        Write-Host "Execute primeiro: scripts/migrate-to-sql.ps1" -ForegroundColor Yellow
        exit 1
    }
}

# Verificar se o arquivo SQL existe
if (-not (Test-Path $SqlFile)) {
    Write-Host "Arquivo SQL não encontrado: $SqlFile" -ForegroundColor Red
    exit 1
}

Write-Host "Arquivo SQL: $SqlFile" -ForegroundColor Cyan
Write-Host "Banco de dados: $Database" -ForegroundColor Cyan
Write-Host ""

# Verificar se o banco SQLite3 existe
if (-not (Test-Path $Database)) {
    Write-Host "Banco SQLite3 não encontrado. Criando novo banco..." -ForegroundColor Yellow
    
    # Criar diretório se não existir
    $dbDir = Split-Path $Database -Parent
    if (-not (Test-Path $dbDir)) {
        New-Item -ItemType Directory -Path $dbDir -Force | Out-Null
    }
    
    # Criar banco vazio
    New-Item -ItemType File -Path $Database -Force | Out-Null
    Write-Host "Banco SQLite3 criado: $Database" -ForegroundColor Green
}

# Verificar se sqlite3 está disponível
try {
    $null = Get-Command sqlite3 -ErrorAction Stop
    Write-Host "SQLite3 encontrado, aplicando migração..." -ForegroundColor Yellow
} catch {
    Write-Host "SQLite3 não encontrado. Instale o SQLite3 para aplicar a migração." -ForegroundColor Red
    Write-Host "Você pode baixar em: https://www.sqlite.org/download.html" -ForegroundColor Yellow
    exit 1
}

# Fazer backup do banco atual se existir
if ((Test-Path $Database) -and (Get-Item $Database).Length -gt 0) {
    $backupFile = "$Database.backup.$(Get-Date -Format 'yyyyMMdd_HHmmss')"
    Copy-Item $Database $backupFile
    Write-Host "Backup criado: $backupFile" -ForegroundColor Yellow
}

# Aplicar migração
Write-Host "Aplicando migração..." -ForegroundColor Yellow
Get-Content $SqlFile | sqlite3 $Database

if ($LASTEXITCODE -eq 0) {
    Write-Host ""
    Write-Host "=== Migração aplicada com sucesso! ===" -ForegroundColor Green
    Write-Host ""
    
    # Verificar resultado
    $result = sqlite3 $Database "SELECT COUNT(*) as total_pastes, SUM(LENGTH(content)) as total_size FROM pastes;"
    Write-Host "Resultado da migração:" -ForegroundColor Cyan
    Write-Host $result -ForegroundColor White
    
    Write-Host ""
    Write-Host "Para verificar alguns pastes migrados:" -ForegroundColor Yellow
    Write-Host "sqlite3 $Database `"SELECT short_id, substr(content, 1, 50) FROM pastes LIMIT 5;`"" -ForegroundColor White
    
    Write-Host ""
    Write-Host "Para iniciar o servidor com os dados migrados:" -ForegroundColor Yellow
    Write-Host "./yasuc.exe -db $Database -port 8080 -addr 127.0.0.1" -ForegroundColor White
} else {
    Write-Host "Erro ao aplicar migração." -ForegroundColor Red
    exit 1
} 