<?php
// api/backup_api.php
session_start();
require_once '../includes/db.php';

// Apenas ADMIN pode mexer aqui
if (!isset($_SESSION['logged_in_fxtream']) || $_SESSION['role'] !== 'admin') { 
    die("Acesso Negado"); 
}

$action = $_REQUEST['action'] ?? '';

// Aumenta tempo e memória para bancos grandes
set_time_limit(0);
ini_set('memory_limit', '2048M');

if ($action == 'export') {
    // === FAZER BACKUP (EXPORTAR) ===
    
    $tables = [];
    $stmt = $pdo->query("SHOW TABLES");
    while ($row = $stmt->fetch(PDO::FETCH_NUM)) { $tables[] = $row[0]; }

    $sqlScript = "SET FOREIGN_KEY_CHECKS=0;\n\n";

    foreach ($tables as $table) {
        // Estrutura da tabela
        $row = $pdo->query("SHOW CREATE TABLE $table")->fetch(PDO::FETCH_NUM);
        $sqlScript .= "\n\n" . $row[1] . ";\n\n";

        // Dados da tabela
        $stmt = $pdo->query("SELECT * FROM $table");
        while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
            $sqlScript .= "INSERT INTO $table VALUES(";
            $first = true;
            foreach ($row as $value) {
                if (!$first) { $sqlScript .= ", "; }
                if ($value === null) {
                    $sqlScript .= "NULL";
                } else {
                    $sqlScript .= $pdo->quote($value);
                }
                $first = false;
            }
            $sqlScript .= ");\n";
        }
    }
    
    $sqlScript .= "\n\nSET FOREIGN_KEY_CHECKS=1;";

    // Forçar Download
    $filename = 'backup_iptv_' . date('Y-m-d_H-i') . '.sql';
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename=' . $filename);
    echo $sqlScript;
    exit;
}

if ($action == 'import') {
    // === RESTAURAR BACKUP (IMPORTAR) ===
    header('Content-Type: application/json');

    if (!isset($_FILES['backup_file']) || $_FILES['backup_file']['error'] != 0) {
        echo json_encode(['status' => false, 'msg' => 'Erro no upload do arquivo.']);
        exit;
    }

    $file = $_FILES['backup_file']['tmp_name'];
    
    // Lę o arquivo linha por linha para năo estourar a memória
    $templine = '';
    $lines = file($file);
    
    $erro = false;
    $msg = '';

    try {
        $pdo->exec("SET FOREIGN_KEY_CHECKS=0");
        
        foreach ($lines as $line) {
            // Ignora comentários
            if (substr($line, 0, 2) == '--' || $line == '') continue;

            $templine .= $line;
            // Se a linha termina com ; é o fim da query
            if (substr(trim($line), -1, 1) == ';') {
                try {
                    $pdo->exec($templine);
                } catch (Exception $e) {
                    // Ignora erros pequenos de tabela existente, mas continua
                }
                $templine = '';
            }
        }
        
        $pdo->exec("SET FOREIGN_KEY_CHECKS=1");
        echo json_encode(['status' => true, 'msg' => 'Banco de dados restaurado com sucesso!']);

    } catch (Exception $e) {
        echo json_encode(['status' => false, 'msg' => 'Erro fatal ao restaurar: ' . $e->getMessage()]);
    }
    exit;
}
?>