<?php
session_start();
if (empty($_SESSION['csrf_token'])) {
    $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}

// Solo admins pueden ejecutar
if (!isset($_SESSION['usuario']) || $_SESSION['rol'] !== 'admin') {
    die("Acceso denegado");
}

$host = 'localhost';
$user = 'todo';
$pass = 'todo';
$db   = 'todo';

$fecha = date('Y-m-d_H-i-s');
$carpetaDestino = __DIR__ . '/backups';
$nombreSQL = "backup_{$db}_{$fecha}.sql";
$rutaSQL = $carpetaDestino . '/' . $nombreSQL;
$nombreZIP = "uploads_{$fecha}.zip";
$rutaZIP = $carpetaDestino . '/' . $nombreZIP;

// Crear carpeta si no existe
if (!is_dir($carpetaDestino)) {
    mkdir($carpetaDestino, 0777, true);
}

// Estado de procesos
$estadoBD = false;
$estadoZIP = false;

// Ejecutar mysqldump
$comando = sprintf(
    'C:\xampp\mysql\bin\mysqldump.exe --user=%s --password=%s --host=%s %s > %s 2> %s',
    escapeshellarg($user),
    escapeshellarg($pass),
    escapeshellarg($host),
    escapeshellarg($db),
    escapeshellarg($rutaSQL),
    escapeshellarg($carpetaDestino . '/error.log')
);
exec($comando, $output, $resultado);
if ($resultado === 0 && file_exists($rutaSQL)) {
    $estadoBD = true;
}

// Crear ZIP de uploads
$carpetaUploads = __DIR__ . '/uploads';
$zip = new ZipArchive();
if ($zip->open($rutaZIP, ZipArchive::CREATE | ZipArchive::OVERWRITE)) {
    $archivos = new RecursiveIteratorIterator(
        new RecursiveDirectoryIterator($carpetaUploads),
        RecursiveIteratorIterator::LEAVES_ONLY
    );

    foreach ($archivos as $archivo) {
        if (!$archivo->isDir()) {
            $rutaReal = $archivo->getRealPath();
            $rutaRelativa = substr($rutaReal, strlen($carpetaUploads) + 1);
            $zip->addFile($rutaReal, $rutaRelativa);
        }
    }

    $zip->close();
    $estadoZIP = true;
}

// Construir mensaje del modal
$mensajeModal = "<ul class='list-unstyled mb-0'>";
$mensajeModal .= "<li>📦 Base de datos: " . ($estadoBD ? "<span class='text-success'>Copia realizada</span>" : "<span class='text-danger'>Error</span>") . "</li>";
$mensajeModal .= "<li></li>";
$mensajeModal .= "<li>🗂️ Carpeta uploads: " . ($estadoZIP ? "<span class='text-success'>Copia realizada</span>" : "<span class='text-danger'>Error</span>") . "</li>";
$mensajeModal .= "</ul>";

$tipoModal = ($estadoBD && $estadoZIP) ? 'success' : 'danger';
?>
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <title>Backup del sistema</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body class="bg-light">
<div class="container py-5 text-center">
    <h2>🗃️ Generación de Copia de Seguridad</h2>
</div>

<!-- Modal -->
<div class="modal fade" id="resultadoModal" tabindex="-1" aria-labelledby="resultadoModalLabel" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-content border-<?= $tipoModal ?>">
      <div class="modal-header bg-<?= $tipoModal ?> text-white">
        <h5 class="modal-title" id="resultadoModalLabel">Resultado del proceso</h5>
        <button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal" aria-label="Cerrar"></button>
      </div>
      <div class="modal-body">
        <?= $mensajeModal ?>
      </div>
      <div class="modal-footer">
        <a href="gestionar_usuarios.php" class="btn btn-outline-secondary">Volver</a>
      </div>
    </div>
  </div>
</div>

<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
<script>
document.addEventListener('DOMContentLoaded', () => {
    const modal = new bootstrap.Modal(document.getElementById('resultadoModal'));
    modal.show();
});
</script>
</body>
</html>
