<?php
// Arquivo: editar_administrador.php

// Habilitar exibição de erros para depuração (mantenha apenas em desenvolvimento)
error_reporting(E_ALL);
ini_set('display_errors', 1);

if (session_status() == PHP_SESSION_NONE) {
    session_start();
}

require_once 'middleware-auth.php'; // Deve lidar com session_start() e autenticação
require_once 'conexao.php';         // Fornece $pdo global
require_once 'env.php';             // Carrega .env se não feito por conexao.php

// Verificar autenticação de administrador
authAdministrador(); // Garante que apenas administradores autenticados acessem

// Gerar token CSRF para o formulário
if (empty($_SESSION['csrf_token'])) {
    $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}

// Variáveis de inicialização
$id_admin_editar = null;
$admin_data = null; // Renomeado de $admin para clareza
$mensagem_erro_pagina = ''; // Para erros ao carregar dados

// Obter ID do administrador a ser editado (deve vir via GET)
$id_admin_editar = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);

if (!$id_admin_editar) {
    // Se não houver ID no GET, e o admin logado estiver editando a si mesmo, poderia pegar da sessão.
    // Mas para um painel de admin, geralmente o ID do alvo vem via GET.
    // O typo 'id_para_para_editar_admin' foi corrigido para 'id_para_editar_admin'
    if (isset($_SESSION['id_para_editar_admin'])) {
        $id_admin_editar = (int)$_SESSION['id_para_editar_admin'];
        unset($_SESSION['id_para_editar_admin']); // Limpa após usar
    } else {
        error_log("Tentativa de acesso a editar_administrador.php sem ID válido.");
        $_SESSION['mensagem_painel_adm'] = "ID do administrador não fornecido ou inválido.";
        $_SESSION['tipo_mensagem_painel_adm'] = "danger";
        header("Location: painel-adm.php"); // Ou para listar administradores
        exit();
    }
}

// $pdo já deve estar disponível de conexao.php
if (!$pdo) {
    error_log("Falha ao editar administrador: conexão PDO não disponível.");
    // Esta mensagem provavelmente não será vista pelo usuário se conexao.php usar die()
    die("Erro crítico de sistema (DB). Não é possível editar administrador.");
}

try {
    // Buscar dados do administrador
    $stmt_fetch = $pdo->prepare("SELECT id, nome, login FROM Administradores WHERE id = ?");
    $stmt_fetch->execute([$id_admin_editar]);
    $admin_data = $stmt_fetch->fetch(PDO::FETCH_ASSOC);

    if (!$admin_data) {
        $_SESSION['mensagem_painel_adm'] = "Administrador com ID {$id_admin_editar} não encontrado.";
        $_SESSION['tipo_mensagem_painel_adm'] = "warning";
        header("Location: painel-adm.php"); // Ou para listar administradores
        exit();
    }
} catch (PDOException $e) {
    error_log('Erro PDO ao buscar administrador para edição (ID: ' . $id_admin_editar . '): ' . $e->getMessage());
    $_SESSION['mensagem_painel_adm'] = "Erro ao carregar dados do administrador.";
    $_SESSION['tipo_mensagem_painel_adm'] = "danger";
    header("Location: painel-adm.php"); // Ou para listar administradores
    exit();
} catch (Exception $e) { // Captura outras exceções
    error_log('Erro geral ao buscar administrador para edição (ID: ' . $id_admin_editar . '): ' . $e->getMessage());
    $_SESSION['mensagem_painel_adm'] = "Ocorreu um erro inesperado.";
    $_SESSION['tipo_mensagem_painel_adm'] = "danger";
    header("Location: painel-adm.php");
    exit();
}

// Rastrear o acesso (usando $pdo)
if (isset($_SESSION['id'], $_SESSION['role'])) {
    $usuario_id_sessao = $_SESSION['id'];
    $role_sessao = $_SESSION['role'];
    $role_map_hist = ['Empresas' => 'empresa', 'Candidatos' => 'candidato', 'Administradores' => 'admin', 'Administrador' => 'admin'];
    $tipo_usuario_hist = $role_map_hist[$role_sessao] ?? 'desconhecido';
     if ($tipo_usuario_hist === 'desconhecido') {
        error_log("Role de sessão não mapeado para histórico em editar_administrador.php: " . $role_sessao);
    }
    $pagina_acessada_hist = $_SERVER['REQUEST_URI'];
    
    try {
        $stmt_hist = $pdo->prepare("INSERT INTO historico_acessos (usuario_id, tipo_usuario, pagina_acessada, data_acesso) VALUES (?, ?, ?, NOW())");
        $stmt_hist->execute([$usuario_id_sessao, $tipo_usuario_hist, $pagina_acessada_hist]);
    } catch (PDOException $e_log) {
        error_log("Erro ao registrar histórico de acesso em editar_administrador.php: " . $e_log->getMessage());
    }
}

// Recuperar dados do formulário da sessão para repopulação, se houver erro no processamento
$form_data_repop = $_SESSION['form_data_admin_edit'] ?? [];
$form_errors = $_SESSION['form_errors_admin_edit'] ?? [];
unset($_SESSION['form_data_admin_edit'], $_SESSION['form_errors_admin_edit']);

function get_admin_form_value($field_name, $default_from_db = '') {
    global $form_data_repop;
    return htmlspecialchars($form_data_repop[$field_name] ?? $default_from_db);
}
function display_admin_error($field_name) {
    global $form_errors;
    if (!empty($form_errors[$field_name])) {
        echo '<div class="invalid-feedback d-block">' . htmlspecialchars($form_errors[$field_name]) . '</div>';
    }
}

?>
<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Editar Administrador - Self Lix</title>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
    <style>
        /* Seus estilos customizados */
        body { font-family: Arial, sans-serif; background-color: #f4f4f4; color: #333; line-height: 1.6; padding: 20px; }
        
        .container {
            max-width: 450px;
            margin: 20px auto;
            background-color: white;
            padding: 25px;
            border-radius: 8px;
            box-shadow: 0 0 15px rgba(0,0,0,0.1);
        }
        h2 { text-align: center; margin-bottom: 20px; color: #12929e; font-size: 24px; }
        
        /* Ajuste do espaçamento entre grupos de formulário */
        .form-group {
            margin-bottom: 25px; /* Aumentado de 18px para 25px para mais espaço entre os campos */
        }

        /* Mantive o margin-bottom do label como estava originalmente (6px) ou como você preferir,
           já que o problema era entre grupos, não label-input */
        label {
            display: block;
            margin-bottom: 6px; /* Ou o valor que você tinha antes de 10px, se preferir */
            font-weight: bold;
            color: #444;
        }

        /* Estilos gerais para inputs e botões (mantidos e ajustados para Bootstrap) */
        input.form-control {
            padding: 12px;
            border: 1px solid #ddd;
            border-radius: 5px;
            font-size: 16px;
            transition: border-color 0.3s, box-shadow 0.3s;
        }
        input.form-control:focus {
            border-color: #12929e;
            box-shadow: 0 0 5px rgba(18, 146, 158, 0.4);
            outline: none;
        }
        
        button {
            background-color: #12929e;
            color: white;
            border: none;
            padding: 12px;
            border-radius: 5px;
            cursor: pointer;
            transition: all 0.3s;
            font-size: 16px;
            font-weight: bold;
            margin-top: 5px;
            width: 100%;
        }
        button:hover { background-color: #0e7a84; transform: translateY(-2px); }
        
        .voltar { display: block; text-align: center; margin-top: 20px; text-decoration: none; color: #12929e; font-weight: bold; transition: color 0.3s; padding: 8px; }
        .voltar:hover { color: #0e7a84; text-decoration: underline; }
        
        /* Estilos para mensagens de feedback (erros/sucesso) */
        .message-feedback { padding: 12px; border-radius: 5px; margin-bottom: 20px; border-left: 4px solid; }
        .message-feedback.erro { background-color: #ffe6e6; color: #d63031; border-left-color: #d63031; }
        .message-feedback.success { background-color: #e6fff2; color: #00875a; border-left-color: #00b074; }
        
        .form-hint { font-size: 12px; color: #666; margin-top: 4px; }
        .invalid-feedback.d-block { font-size: 0.9em; }
    </style>
</head>
<body>
    <div class="container">
        <h2>Editar Administrador</h2>

        <?php
        // Exibir mensagens de erro/sucesso da sessão (do processamento)
        if (isset($_SESSION['mensagem_form_admin'])) {
            $tipo_msg_sessao = ($_SESSION['tipo_mensagem_form_admin'] ?? 'danger') === 'success' ? 'success' : 'erro';
            echo "<div class='message-feedback {$tipo_msg_sessao}'><i class='fas " . ($tipo_msg_sessao === 'success' ? 'fa-check-circle' : 'fa-exclamation-circle') . "'></i> " . htmlspecialchars($_SESSION['mensagem_form_admin']) . "</div>";
            unset($_SESSION['mensagem_form_admin'], $_SESSION['tipo_mensagem_form_admin']);
        }
        // Exibir mensagens de erro via GET (para erros ao carregar a página)
        if (isset($_GET['erro'])) {
            echo "<div class='message-feedback erro'><i class='fas fa-exclamation-circle'></i> " . htmlspecialchars($_GET['erro']) . "</div>";
        }
        if (!empty($form_errors['geral'])) {
            echo "<div class='message-feedback erro'><i class='fas fa-exclamation-circle'></i> " . htmlspecialchars($form_errors['geral']) . "</div>";
        }
        ?>

        <?php if ($admin_data): ?>
        <form action="processa_editar_administrador.php" method="post">
            <input type="hidden" name="csrf_token" value="<?php echo htmlspecialchars($_SESSION['csrf_token']); ?>">
            <input type="hidden" name="id" value="<?= htmlspecialchars($admin_data['id']) ?>">
            
            <div class="form-group">
                <label for="nome">Nome:</label>
                <input type="text" id="nome" name="nome" class="form-control"
                       value="<?= get_admin_form_value('nome', $admin_data['nome'] ?? '') ?>" 
                       required placeholder="Nome completo">
                <?php display_admin_error('nome'); ?>
            </div>
            
            <div class="form-group">
                <label for="login">Login (E-mail):</label>
                <input type="email" id="login" name="login" class="form-control"
                       value="<?= get_admin_form_value('login', $admin_data['login'] ?? '') ?>" 
                       required placeholder="email@exemplo.com">
                <?php display_admin_error('login'); ?>
            </div>
            
            <div class="form-group">
                <label for="senha">Nova Senha (Opcional):</label>
                <input type="password" id="senha" name="senha" class="form-control"
                       minlength="8"
                       pattern="(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}"
                       title="Deve conter pelo menos 8 caracteres, uma maiúscula, uma minúscula e um número."
                       placeholder="Deixe em branco para manter a atual">
                <div class="form-hint">Mín. 8 caracteres, com maiúscula, minúscula e número.</div>
                <?php display_admin_error('senha'); ?>
            </div>
            
            <button type="submit"><i class="fas fa-save"></i> Salvar Alterações</button>
        </form>
        <?php else: ?>
            <p>Não foi possível carregar os dados do administrador para edição.</p>
        <?php endif; ?>
        
        <a href="painel-adm.php" class="voltar"><i class="fas fa-arrow-left"></i> Voltar ao Painel</a>
    </div>

    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
    <script>
        document.addEventListener('DOMContentLoaded', function() {
            const errorMessages = document.querySelectorAll('.message-feedback.erro, .message-feedback.success');
            const form = document.querySelector('form');
            if (form) {
                const firstInput = form.querySelector('input[name="nome"]');
                if (errorMessages.length > 0 && firstInput) {
                    firstInput.addEventListener('focus', function() {
                        errorMessages.forEach(msg => msg.style.display = 'none');
                    });
                }
            }
        });
    </script>
</body>
</html>