<?php
/**
 * SAC 2026 - MASTER BACKUP ENGINE v1.0
 * Genera un volcado SQL completo de la base de datos para recuperación ante desastres.
 */
require_once 'config.php';

// Verificación estricta: Solo el programador/arquitecto
checkAccess(['programmer']);

try {
    $tables = array();
    $result = $pdo->query('SHOW TABLES');
    while($row = $result->fetch(PDO::FETCH_NUM)){
        $tables[] = $row[0];
    }

    $sqlDump = "-- SAC 2026 - MASTER DATABASE DUMP\n";
    $sqlDump .= "-- Arrendatario: Condominio El Tejar\n";
    $sqlDump .= "-- Generado: " . date('Y-m-d H:i:s') . "\n";
    $sqlDump .= "SET FOREIGN_KEY_CHECKS=0;\n\n";

    foreach($tables as $table){
        // Estructura de la Tabla
        $res = $pdo->query("SHOW CREATE TABLE `$table` ");
        $row = $res->fetch(PDO::FETCH_NUM);
        $sqlDump .= "\n\n" . $row[1] . ";\n\n";

        // Datos de la Tabla
        $res = $pdo->query("SELECT * FROM `$table` ");
        while($row = $res->fetch(PDO::FETCH_NUM)){
            $sqlDump .= "INSERT INTO `$table` VALUES(";
            for($j=0; $j<count($row); $j++){
                if (isset($row[$j])) {
                    $val = addslashes($row[$j]);
                    $val = str_replace("\n","\\n",$val);
                    $sqlDump .= '"'.$val.'"' ; 
                } else { 
                    $sqlDump .= 'NULL'; 
                }
                if ($j<(count($row)-1)) { $sqlDump .= ','; }
            }
            $sqlDump .= ");\n";
        }
    }
    
    $sqlDump .= "\nSET FOREIGN_KEY_CHECKS=1;";

    // Encabezados para descarga forzada
    header('Content-Type: application/sql');
    header('Content-Disposition: attachment; filename="sac_tejar_full_backup_'.date('Ymd_His').'.sql"');
    header('Pragma: no-cache');
    header('Expires: 0');
    
    echo $sqlDump;
    exit;

} catch (Exception $e) {
    http_response_code(500);
    echo "FALLO CRITICO EN EL MOTOR DE RESPALDO: " . $e->getMessage();
}
?>