using DALL;
using System.Data;

// =============================================
// Configuração da connection string
// =============================================
var connectionString = "Server=206.42.13.180;Database=Levelcode-LevelOS;User Id=sa;Password=suasenha;TrustServerCertificate=True;";

var backupService = new DALLBackupService(connectionString);

// =============================================
// Backup FULL
// =============================================
var resultadoFull = backupService.ExecutarBackupFull();

if (resultadoFull.Sucesso)
    Console.WriteLine($"✅ Backup FULL concluído em {resultadoFull.Duracao.TotalSeconds:F1}s");
else
    Console.WriteLine($"❌ Erro no Backup FULL: {resultadoFull.Erro}");

// =============================================
// Backup DIFERENCIAL
// =============================================
var resultadoDiff = backupService.ExecutarBackupDiferencial();

if (resultadoDiff.Sucesso)
    Console.WriteLine($"✅ Backup DIFERENCIAL concluído em {resultadoDiff.Duracao.TotalSeconds:F1}s");
else
    Console.WriteLine($"❌ Erro no Backup DIFERENCIAL: {resultadoDiff.Erro}");

// =============================================
// Limpeza de backups antigos
// =============================================
var resultadoLimpeza = backupService.ExecutarLimpeza();

if (resultadoLimpeza.Sucesso)
    Console.WriteLine($"✅ Limpeza concluída em {resultadoLimpeza.Duracao.TotalSeconds:F1}s");
else
    Console.WriteLine($"❌ Erro na Limpeza: {resultadoLimpeza.Erro}");

// =============================================
// Listar histórico de backups
// =============================================
var historico = backupService.ListarHistoricoBackups();

Console.WriteLine("\n📋 Histórico de Backups:");
Console.WriteLine($"{"Tipo",-15} {"TamanhoMB",-12} {"Inicio",-22} {"Arquivo"}");
Console.WriteLine(new string('-', 90));

foreach (DataRow row in historico.Rows)
{
    Console.WriteLine($"{row["Tipo"],-15} {row["TamanhoMB"],-12} {row["Inicio"],-22} {row["Arquivo"]}");
}

// =============================================
// Restauração FULL + DIFERENCIAL
// =============================================

// Pega o arquivo mais recente do histórico automaticamente
string arquivoFull = "";
string arquivoDiff = "";

foreach (DataRow row in historico.Rows)
{
    if (row["Tipo"].ToString() == "FULL" && string.IsNullOrEmpty(arquivoFull))
        arquivoFull = row["Arquivo"].ToString()!;

    if (row["Tipo"].ToString() == "DIFERENCIAL" && string.IsNullOrEmpty(arquivoDiff))
        arquivoDiff = row["Arquivo"].ToString()!;

    if (!string.IsNullOrEmpty(arquivoFull) && !string.IsNullOrEmpty(arquivoDiff))
        break;
}

// Restaura FULL
Console.WriteLine($"\n🔁 Restaurando FULL: {arquivoFull}");
var r1 = backupService.RestaurarBackup(arquivoFull, TipoRestauracao.Full);

if (r1.Sucesso)
{
    Console.WriteLine($"✅ FULL restaurado em {r1.Duracao.TotalSeconds:F1}s");

    // Aplica DIFERENCIAL após o FULL
    Console.WriteLine($"🔁 Aplicando DIFERENCIAL: {arquivoDiff}");
    var r2 = backupService.RestaurarBackup(arquivoDiff, TipoRestauracao.Diferencial);

    if (r2.Sucesso)
        Console.WriteLine($"✅ DIFERENCIAL aplicado em {r2.Duracao.TotalSeconds:F1}s — Banco online!");
    else
        Console.WriteLine($"❌ Erro no DIFERENCIAL: {r2.Erro}");
}
else
{
    Console.WriteLine($"❌ Erro no FULL: {r1.Erro}");
}