<?php
session_start();

// Defina uma senha de acesso segura
define('SENHA_ATUALIZADOR', 'sua_senha_forte_aqui');

// Verifica se está logado no painel de atualização
if (!isset($_SESSION['logado']) && isset($_POST['senha'])) {
    if ($_POST['senha'] === SENHA_ATUALIZADOR) {
        $_SESSION['logado'] = true;
    } else {
        echo "<p style='color:red'>Senha incorreta.</p>";
    }
}

// Realiza o logout
if (isset($_GET['logout'])) {
    session_destroy();
    header('Location: atualizador.php');
    exit;
}

// Função de backup
function backupSistema() {
    $zip = new ZipArchive();
    $backupName = 'backup_sistema_' . date('Ymd_His') . '.zip';
    if ($zip->open($backupName, ZipArchive::CREATE | ZipArchive::OVERWRITE)) {
        $files = new RecursiveIteratorIterator(
            new RecursiveDirectoryIterator(__DIR__, RecursiveDirectoryIterator::SKIP_DOTS),
            RecursiveIteratorIterator::SELF_FIRST
        );

        foreach ($files as $file) {
            $filePath = $file->getRealPath();
            if (
                strpos($filePath, __DIR__ . DIRECTORY_SEPARATOR . 'backup_sistema_') !== 0 &&
                strpos($filePath, __DIR__ . DIRECTORY_SEPARATOR . 'atualizacao.zip') === false &&
                strpos($filePath, __DIR__ . DIRECTORY_SEPARATOR . 'atualizador.php') === false
            ) {
                $zip->addFile($filePath, str_replace(__DIR__ . DIRECTORY_SEPARATOR, '', $filePath));
            }
        }

        $zip->close();
        return $backupName;
    }
    return false;
}

?>

<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <title>Atualizador SOV</title>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css">
</head>
<body class="container py-5">
    <h2>Atualizador de Sistema SOV</h2>

    <?php if (!isset($_SESSION['logado'])): ?>
        <form method="post">
            <div class="mb-3">
                <label for="senha" class="form-label">Senha de acesso</label>
                <input type="password" name="senha" id="senha" class="form-control" required>
            </div>
            <button class="btn btn-primary">Entrar</button>
        </form>
        <?php exit; ?>
    <?php endif; ?>

    <p><a href="?logout=1" class="btn btn-outline-secondary btn-sm">Sair</a></p>

    <?php
    if ($_FILES && isset($_FILES['arquivo'])) {
        $arquivo = $_FILES['arquivo'];

        if ($arquivo['type'] === 'application/zip') {
            move_uploaded_file($arquivo['tmp_name'], 'atualizacao.zip');

            echo "<p>Criando backup...</p>";
            $backup = backupSistema();
            if ($backup) {
                echo "<p>Backup salvo como: <strong>$backup</strong></p>";
            } else {
                echo "<p style='color:red'>Erro ao criar backup!</p>";
            }

            echo "<p>Extraindo atualização...</p>";
            $zip = new ZipArchive;
            if ($zip->open('atualizacao.zip') === TRUE) {
                $zip->extractTo(__DIR__);
                $zip->close();
                echo "<p style='color:green'>Atualização aplicada com sucesso.</p>";
            } else {
                echo "<p style='color:red'>Erro ao abrir o arquivo ZIP.</p>";
            }
        } else {
            echo "<p style='color:red'>Apenas arquivos ZIP são permitidos.</p>";
        }
    }
    ?>

    <form method="post" enctype="multipart/form-data">
        <div class="mb-3">
            <label for="arquivo" class="form-label">Arquivo ZIP da atualização</label>
            <input type="file" name="arquivo" id="arquivo" class="form-control" required>
        </div>
        <button type="submit" class="btn btn-success">Enviar e Atualizar</button>
    </form>
</body>
</html>
