HEX
Server: LiteSpeed
System: Linux cp01.bhostbrasil.com.br 5.14.0-611.16.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Mon Dec 22 03:40:39 EST 2025 x86_64
User: onlyfibr (1083)
PHP: 8.2.31
Disabled: NONE
Upload Files
File: /home/onlyfibr/public_html/cadastro/admin/gerenciar_usuarios.php
<?php
// HABILITAR ERROS PARA DEBUG - REMOVER/COMENTAR EM PRODUÇÃO!
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
// ---------------------------------------------------------
// 1. Verifica se o admin está logado
require_once 'includes/auth_check.php';

// Define o título desta página ANTES de incluir o header
$pageTitle = 'Gerenciar Usuários';

require_once '../includes/config/config.php';
require_once '../includes/functions/functions.php';

// Verifica se o usuário atual tem permissão de administrador
if (!usuarioEhAdmin()) {
    $_SESSION['erro_dashboard'] = "Você não tem permissão para acessar esta página.";
    header("Location: index.php");
    exit;
}

// --- Processamento de mensagens flash ---
$mensagem_erro = $_SESSION['erro_dashboard'] ?? null;
$mensagem_sucesso = $_SESSION['sucesso_dashboard'] ?? null;
unset($_SESSION['erro_dashboard'], $_SESSION['sucesso_dashboard']);

// --- Função para gerar token CSRF ---
function gerarCsrfToken()
{
    if (!isset($_SESSION['csrf_token'])) {
        $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
    }
    return $_SESSION['csrf_token'];
}

// Gera um novo token CSRF para os formulários
$csrf_token = gerarCsrfToken();

// --- Ação: Adicionar Usuário ---
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'add') {
    // Verifica token CSRF
    if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
        $_SESSION['erro_dashboard'] = "Erro de validação do formulário. Por favor, tente novamente.";
    } else {
        // Pega os dados do formulário
        $nome_usuario = filter_input(INPUT_POST, 'nome_usuario', FILTER_SANITIZE_STRING);
        $nome_completo = filter_input(INPUT_POST, 'nome_completo', FILTER_SANITIZE_STRING);
        $email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
        $senha = $_POST['senha_hash'] ?? '';
        $confirmar_senha = $_POST['confirmar_senha'] ?? '';
        $tipo = filter_input(INPUT_POST, 'tipo', FILTER_SANITIZE_STRING);
        $permissoes_selecionadas = $_POST['permissoes'] ?? [];

        // Validações
        $erros = [];

        if (empty($nome_usuario)) $erros[] = "Nome de usuário é obrigatório.";
        if (empty($nome_completo)) $erros[] = "Nome Completo é obrigatório.";
        if (empty($email) || !filter_var($email, FILTER_VALIDATE_EMAIL)) $erros[] = "Email inválido.";
        if (empty($senha)) $erros[] = "Senha é obrigatória.";
        if ($senha !== $confirmar_senha) $erros[] = "As senhas não conferem.";
        if (strlen($senha) < 8) $erros[] = "A senha deve ter pelo menos 8 caracteres.";
        if (!preg_match('/[A-Z]/', $senha)) $erros[] = "A senha deve ter pelo menos uma letra maiúscula.";
        if (!preg_match('/[a-z]/', $senha)) $erros[] = "A senha deve ter pelo menos uma letra minúscula.";
        if (!preg_match('/[0-9]/', $senha)) $erros[] = "A senha deve ter pelo menos um número.";
        if (empty($tipo)) $erros[] = "Tipo de usuário é obrigatório.";

        // Tipos de usuário válidos
        $tipos_validos = ['admin', 'suporte', 'financeiro'];
        if (!in_array($tipo, $tipos_validos)) $erros[] = "Tipo de usuário inválido.";

        // Validação das permissões selecionadas
        $todas_permissoes = ['admin', 'suporte', 'financeiro', 'usuario'];
        foreach ($permissoes_selecionadas as $perm) {
            if (!in_array($perm, $todas_permissoes)) {
                $erros[] = "Permissão inválida: " . htmlspecialchars($perm);
            }
        }

        // Se não houver erros, adiciona o usuário
        if (empty($erros) && $pdo) {
            try {
                // Verificar se o email já existe
                $stmt_check = $pdo->prepare("SELECT id FROM admin_usuarios WHERE email = :email");
                $stmt_check->bindParam(':email', $email, PDO::PARAM_STR);
                $stmt_check->execute();

                if ($stmt_check->rowCount() > 0) {
                    $_SESSION['erro_dashboard'] = "Este email já está em uso.";
                } else {
                    // Hash da senha
                    $hash_senha = password_hash($senha, PASSWORD_DEFAULT, ['cost' => 12]);

                    // JSON das permissões
                    $permissoes_json = json_encode($permissoes_selecionadas);

                    // Preparar a query
                    $sql = "INSERT INTO admin_usuarios (nome_usuario, nome_completo, email, senha_hash, nivel_acesso, permissoes, ativo, data_criacao) 
                            VALUES (:nome_usuario, :nome_completo, :email, :senha_hash, :tipo, :permissoes, TRUE, NOW())";

                    $stmt = $pdo->prepare($sql);
                    $stmt->bindParam(':nome_usuario', $nome_usuario, PDO::PARAM_STR);
                    $stmt->bindParam(':nome_completo', $nome_completo, PDO::PARAM_STR);
                    $stmt->bindParam(':email', $email, PDO::PARAM_STR);
                    $stmt->bindParam(':senha_hash', $hash_senha, PDO::PARAM_STR);
                    $stmt->bindParam(':tipo', $tipo, PDO::PARAM_STR);
                    $stmt->bindParam(':permissoes', $permissoes_json, PDO::PARAM_STR);

                    if ($stmt->execute()) {
                        $_SESSION['sucesso_dashboard'] = "Usuário adicionado com sucesso!";
                        header('Location: ' . htmlspecialchars($_SERVER['PHP_SELF']));
                        exit;
                    } else {
                        $_SESSION['erro_dashboard'] = "Erro ao adicionar usuário.";
                    }
                }
            } catch (PDOException $e) {
                $_SESSION['erro_dashboard'] = "Erro ao adicionar usuário: " . $e->getMessage();
                error_log("Erro ao adicionar usuário: " . $e->getMessage());
            }
        } else if (!empty($erros)) {
            $_SESSION['erro_dashboard'] = "Erros encontrados: " . implode(" ", $erros);
        }
    }
    header('Location: ' . htmlspecialchars($_SERVER['PHP_SELF']));
    exit;
}

// --- Ação: Editar Usuário ---
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'edit') {
    // Verifica token CSRF
    if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
        $_SESSION['erro_dashboard'] = "Erro de validação do formulário. Por favor, tente novamente.";
    } else {
        // Pega os dados do formulário
        $id = filter_input(INPUT_POST, 'id', FILTER_VALIDATE_INT);
        $nome_usuario = filter_input(INPUT_POST, 'nome_usuario', FILTER_SANITIZE_STRING);
        $nome_completo = filter_input(INPUT_POST, 'nome_completo', FILTER_SANITIZE_STRING);
        $email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
        $tipo = filter_input(INPUT_POST, 'tipo', FILTER_SANITIZE_STRING);
        $permissoes_selecionadas = $_POST['permissoes'] ?? [];
        $ativo = isset($_POST['ativo']) && $_POST['ativo'] === '1';
        $senha_nova = $_POST['senha_nova'] ?? '';
        $confirmar_senha_nova = $_POST['confirmar_senha_nova'] ?? '';

        // Validações
        $erros = [];

        if (empty($id)) $erros[] = "ID do usuário inválido.";
        if (empty($nome_usuario)) $erros[] = "Nome de usuário é obrigatório.";
        if (empty($nome_completo)) $erros[] = "Nome completo é obrigatório.";
        if (empty($email) || !filter_var($email, FILTER_VALIDATE_EMAIL)) $erros[] = "Email inválido.";
        if (empty($tipo)) $erros[] = "Tipo de usuário é obrigatório.";

        // Validação da senha (somente se estiver sendo alterada)
        if (!empty($senha_nova)) {
            if ($senha_nova !== $confirmar_senha_nova) $erros[] = "As senhas não conferem.";
            if (strlen($senha_nova) < 8) $erros[] = "A senha deve ter pelo menos 8 caracteres.";
            if (!preg_match('/[A-Z]/', $senha_nova)) $erros[] = "A senha deve ter pelo menos uma letra maiúscula.";
            if (!preg_match('/[a-z]/', $senha_nova)) $erros[] = "A senha deve ter pelo menos uma letra minúscula.";
            if (!preg_match('/[0-9]/', $senha_nova)) $erros[] = "A senha deve ter pelo menos um número.";
        }

        // Tipos de usuário válidos
        $tipos_validos = ['admin', 'suporte', 'financeiro', 'usuario'];
        if (!in_array($tipo, $tipos_validos)) $erros[] = "Tipo de usuário inválido.";

        // Validação das permissões selecionadas
        $todas_permissoes = ['admin', 'suporte', 'financeiro', 'usuario'];
        foreach ($permissoes_selecionadas as $perm) {
            if (!in_array($perm, $todas_permissoes)) {
                $erros[] = "Permissão inválida: " . htmlspecialchars($perm);
            }
        }

        // Se não houver erros, atualiza o usuário
        if (empty($erros) && $pdo) {
            try {
                // Verificar se o email já existe para outro usuário
                $stmt_check = $pdo->prepare("SELECT id FROM admin_usuarios WHERE email = :email AND id != :id");
                $stmt_check->bindParam(':email', $email, PDO::PARAM_STR);
                $stmt_check->bindParam(':id', $id, PDO::PARAM_INT);
                $stmt_check->execute();

                if ($stmt_check->rowCount() > 0) {
                    $_SESSION['erro_dashboard'] = "Este email já está em uso por outro usuário.";
                } else {
                    // JSON das permissões
                    $permissoes_json = json_encode($permissoes_selecionadas);

                    // Preparar a query base
                    $sql = "UPDATE admin_usuarios SET nome_usuario = :nome_usuario, nome_completo = :nome_completo, email = :email, nivel_acesso = :tipo, 
                            permissoes = :permissoes, ativo = :ativo, data_atualizacao = NOW()";

                    // Adicionar atualização de senha se fornecida
                    $params = [
                        ':nome_usuario' => $nome_usuario,
                        ':nome_completo' => $nome_completo,
                        ':email' => $email,
                        ':tipo' => $tipo,
                        ':permissoes' => $permissoes_json,
                        ':ativo' => $ativo,
                        ':id' => $id
                    ];

                    if (!empty($senha_nova)) {
                        $hash_senha = password_hash($senha_nova, PASSWORD_DEFAULT, ['cost' => 12]);
                        $sql .= ", senha_hash = :senha_hash";
                        $params[':senha_hash'] = $hash_senha;
                    }

                    // Finalizar a query
                    $sql .= " WHERE id = :id";

                    $stmt = $pdo->prepare($sql);

                    // Bind params
                    foreach ($params as $param => $value) {
                        $type = is_bool($value) ? PDO::PARAM_BOOL : (is_int($value) ? PDO::PARAM_INT : PDO::PARAM_STR);
                        $stmt->bindValue($param, $value, $type);
                    }

                    if ($stmt->execute()) {
                        $_SESSION['sucesso_dashboard'] = "Usuário atualizado com sucesso!";

                        // Se o usuário editado for o usuário logado atualmente, atualize a sessão
                        if ($_SESSION['usuario_id'] == $id) {
                            $_SESSION['usuario_nome_usuario'] = $nome_usuario;
                            $_SESSION['usuario_nome_completo'] = $nome_completo;
                            $_SESSION['usuario_email'] = $email;
                            $_SESSION['usuario_tipo'] = $tipo;
                            $_SESSION['usuario_permissoes'] = $permissoes_selecionadas;
                        }
                    } else {
                        $_SESSION['erro_dashboard'] = "Erro ao atualizar usuário.";
                    }
                }
            } catch (PDOException $e) {
                $_SESSION['erro_dashboard'] = "Erro ao atualizar usuário: " . $e->getMessage();
                error_log("Erro ao atualizar usuário: " . $e->getMessage());
            }
        } else if (!empty($erros)) {
            $_SESSION['erro_dashboard'] = "Erros encontrados: " . implode(" ", $erros);
        }
    }
    header('Location: ' . htmlspecialchars($_SERVER['PHP_SELF']));
    exit;
}

// --- Buscar lista de usuários ---
$usuarios = [];
if ($pdo) {
    try {
        // Ordenar por mais recentes primeiro
        $sql = "SELECT id, nome_usuario, nome_completo, email, nivel_acesso, permissoes, ativo, bloqueado, data_criacao, ultimo_login 
                FROM admin_usuarios 
                ORDER BY data_criacao DESC";
        $stmt = $pdo->query($sql);
        $usuarios = $stmt->fetchAll(PDO::FETCH_ASSOC);

        // Converte as permissões de JSON para array
        foreach ($usuarios as &$usuario) {
            $usuario['permissoes_array'] = json_decode($usuario['permissoes'], true) ?? [];
        }
    } catch (PDOException $e) {
        $mensagem_erro = "Erro ao buscar usuários: " . $e->getMessage();
        error_log("Erro ao buscar usuários: " . $e->getMessage());
    }
}

// Obter os menus dinamicamente do banco de dados
$menus = carregarMenus($pdo, $usuario_permissoes ?? ['admin']);

// Incluir o header
include_once 'includes/header.php';
?>

<div class="container">
    <div class="d-flex justify-content-between align-items-center mb-4">
        <div>
            <h1>Gerenciar Usuários</h1>
            <p class="text-muted">Gerencie as contas de usuários do sistema</p>
        </div>
        <div>
            <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#addUserModal">
                <i class="fas fa-user-plus me-2"></i>Adicionar Usuário
            </button>
        </div>
    </div>

    <?php if ($mensagem_erro): ?>
        <div class="alert alert-danger alert-dismissible fade show" role="alert">
            <?php echo htmlspecialchars($mensagem_erro); ?>
            <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
        </div>
    <?php endif; ?>

    <?php if ($mensagem_sucesso): ?>
        <div class="alert alert-success alert-dismissible fade show" role="alert">
            <?php echo htmlspecialchars($mensagem_sucesso); ?>
            <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
        </div>
    <?php endif; ?>

    <!-- Tabela de Usuários -->
    <div class="card">
        <div class="card-header bg-light">
            <h5 class="mb-0"><i class="fas fa-users me-2"></i>Lista de Usuários</h5>
        </div>
        <div class="card-body">
            <div class="table-responsive">
                <table class="table table-striped table-hover">
                    <thead>
                        <tr>
                            <th>Usuário</th>
                            <th>Nome</th>
                            <th>Email</th>
                            <th>Tipo</th>
                            <th>Status</th>
                            <th>Último Login</th>
                            <th>Data Criação</th>
                            <th>Ações</th>
                        </tr>
                    </thead>
                    <tbody>
                        <?php if (empty($usuarios)): ?>
                            <tr>
                                <td colspan="7" class="text-center">Nenhum usuário encontrado.</td>
                            </tr>
                        <?php else: ?>
                            <?php foreach ($usuarios as $user): ?>
                                <tr>
                                    <td><?php echo htmlspecialchars($user['nome_usuario']); ?></td>
                                    <td><?php echo htmlspecialchars($user['nome_completo']); ?></td>
                                    <td><?php echo htmlspecialchars($user['email']); ?></td>
                                    <td>
                                        <span class="badge <?php
                                                            switch ($user['nivel_acesso']) {
                                                                case 'admin':
                                                                    echo 'bg-danger';
                                                                    break;
                                                                case 'gerente':
                                                                    echo 'bg-warning text-dark';
                                                                    break;
                                                                case 'atendente':
                                                                    echo 'bg-primary';
                                                                    break;
                                                                default:
                                                                    echo 'bg-secondary';
                                                                    break;
                                                            }
                                                            ?>">
                                            <?php echo ucfirst(htmlspecialchars($user['nivel_acesso'])); ?>
                                        </span>
                                    </td>
                                    <td>
                                        <?php if ($user['bloqueado']): ?>
                                            <span class="badge bg-danger">Bloqueado</span>
                                        <?php elseif (!$user['ativo']): ?>
                                            <span class="badge bg-secondary">Inativo</span>
                                        <?php else: ?>
                                            <span class="badge bg-success">Ativo</span>
                                        <?php endif; ?>
                                    </td>
                                    <td><?php echo $user['ultimo_login'] ? date('d/m/Y H:i', strtotime($user['ultimo_login'])) : 'Nunca'; ?></td>
                                    <td><?php echo date('d/m/Y', strtotime($user['data_criacao'])); ?></td>
                                    <td>
                                        <div class="btn-group" role="group" aria-label="Ações do usuário">
                                            <button type="button" class="btn btn-sm btn-warning edit-user"
                                                data-bs-toggle="modal" data-bs-target="#editUserModal"
                                                data-id="<?php echo $user['id']; ?>"
                                                data-nome-usuario="<?php echo htmlspecialchars($user['nome_usuario']); ?>"
                                                data-nome-completo="<?php echo htmlspecialchars($user['nome_completo']); ?>"
                                                data-email="<?php echo htmlspecialchars($user['email']); ?>"
                                                data-tipo="<?php echo htmlspecialchars($user['nivel_acesso']); ?>"
                                                data-ativo="<?php echo $user['ativo'] ? '1' : '0'; ?>"
                                                data-permissoes='<?php echo htmlspecialchars(json_encode($user['permissoes_array'])); ?>'>
                                                <i class="fas fa-edit"></i>
                                            </button>

                                            <?php if ($user['id'] != $_SESSION['usuario_id']): // Não mostrar botão de exclusão para o próprio usuário 
                                            ?>
                                                <button type="button" class="btn btn-sm btn-danger delete-user"
                                                    data-bs-toggle="modal" data-bs-target="#deleteUserModal"
                                                    data-id="<?php echo $user['id']; ?>"
                                                    data-nome-usuario="<?php echo htmlspecialchars($user['nome_usuario']); ?>">
                                                    <i class="fas fa-trash-alt"></i>
                                                </button>
                                            <?php endif; ?>
                                        </div>
                                    </td>
                                </tr>
                            <?php endforeach; ?>
                        <?php endif; ?>
                    </tbody>
                </table>
            </div>
        </div>
    </div>
</div>

<!-- Modal para Adicionar Usuário -->
<div class="modal fade" id="addUserModal" tabindex="-1" aria-labelledby="addUserModalLabel" aria-hidden="true">
    <div class="modal-dialog modal-lg">
        <div class="modal-content">
            <form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post" id="addUserForm" class="needs-validation" novalidate>
                <input type="hidden" name="action" value="add">
                <input type="hidden" name="csrf_token" value="<?php echo htmlspecialchars($csrf_token); ?>">

                <div class="modal-header">
                    <h5 class="modal-title" id="addUserModalLabel">Adicionar Novo Usuário</h5>
                    <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
                </div>
                <div class="modal-body">
                    <div class="row mb-3">
                        <div class="col-md-6">
                            <label for="add_nome_completo" class="form-label">Nome Completo</label>
                            <input type="text" class="form-control" id="add_nome_completo" name="nome_completo" required>
                            <div class="invalid-feedback">Por favor, informe o nome completo.</div>
                        </div>
                    </div>
                    <div class="row mb-3">
                        <div class="col-md-6">
                            <label for="nome_usuario" class="form-label">Usuário</label>
                            <input type="text" class="form-control" id="nome_usuario" name="nome_usuario" required>
                            <div class="invalid-feedback">Por favor, informe o nomedo usuário.</div>
                        </div>
                        <div class="col-md-6">
                            <label for="email" class="form-label">Email</label>
                            <input type="email" class="form-control" id="email" name="email" required>
                            <div class="invalid-feedback">Por favor, informe um email válido.</div>
                        </div>
                    </div>

                    <div class="row mb-3">
                        <div class="col-md-6">
                            <label for="senha_hash" class="form-label">Senha</label>
                            <div class="input-group">
                                <input type="password" class="form-control" id="senha_hash" name="senha_hash" required>
                                <button class="btn btn-outline-secondary toggle-password" type="button">
                                    <i class="fas fa-eye"></i>
                                </button>
                            </div>
                            <div class="invalid-feedback">Por favor, informe uma senha.</div>
                            <div class="form-text">Mínimo de 8 caracteres, incluindo maiúsculas, minúsculas e números.</div>
                        </div>
                        <div class="col-md-6">
                            <label for="confirmar_senha" class="form-label">Confirmar Senha</label>
                            <div class="input-group">
                                <input type="password" class="form-control" id="confirmar_senha" name="confirmar_senha" required>
                                <button class="btn btn-outline-secondary toggle-password" type="button">
                                    <i class="fas fa-eye"></i>
                                </button>
                            </div>
                            <div class="invalid-feedback">As senhas não conferem.</div>
                        </div>
                    </div>

                    <div class="row mb-3">
                        <div class="col-md-6">
                            <label for="tipo" class="form-label">Tipo de Usuário</label>
                            <select class="form-select" id="tipo" name="tipo" required>
                                <option value="">Selecione o tipo</option>
                                <option value="admin">Administrador</option>
                                <option value="suporte">Suporte</option>
                                <option value="financeiro">Financeiro</option>
                            </select>
                            <div class="invalid-feedback">Por favor, selecione um tipo.</div>
                        </div>
                    </div>

                    <div class="mb-3">
                        <label class="form-label">Permissões</label>
                        <div class="row">
                            <div class="col-md-4">
                                <div class="form-check">
                                    <input class="form-check-input" type="checkbox" id="perm_admin" name="permissoes[]" value="admin">
                                    <label class="form-check-label" for="perm_admin">Administrador</label>
                                </div>
                            </div>
                            <div class="col-md-4">
                                <div class="form-check">
                                    <input class="form-check-input" type="checkbox" id="perm_suporte" name="permissoes[]" value="suporte">
                                    <label class="form-check-label" for="perm_suporte">Suporte</label>
                                </div>
                            </div>
                            <div class="col-md-4">
                                <div class="form-check">
                                    <input class="form-check-input" type="checkbox" id="perm_financeiro" name="permissoes[]" value="financeiro">
                                    <label class="form-check-label" for="perm_financeiro">Financeiro</label>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancelar</button>
                    <button type="submit" class="btn btn-primary">Adicionar Usuário</button>
                </div>
            </form>
        </div>
    </div>
</div>

<!-- Modal para Editar Usuário -->
<div class="modal fade" id="editUserModal" tabindex="-1" aria-labelledby="editUserModalLabel" aria-hidden="true">
    <div class="modal-dialog modal-lg">
        <div class="modal-content">
            <form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post" id="editUserForm" class="needs-validation" novalidate>
                <input type="hidden" name="action" value="edit">
                <input type="hidden" name="csrf_token" value="<?php echo htmlspecialchars($csrf_token); ?>">
                <input type="hidden" name="id" id="edit_id">

                <div class="modal-header">
                    <h5 class="modal-title" id="editUserModalLabel">Editar Usuário</h5>
                    <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
                </div>
                <div class="modal-body">
                    <div class="row mb-3">
                        <div class="col-md-6">
                            <label for="edit_nome_usuario" class="form-label">Usuário</label>
                            <input type="text" class="form-control" id="edit_nome_usuario" name="nome_usuario" required>
                            <div class="invalid-feedback">Por favor, informe o nome de usuário.</div>
                        </div>
                        <div class="modal-body">
                            <div class="row mb-3">
                                <div class="col-md-6">
                                    <label for="edit_nome_completo" class="form-label">Nome Completo</label>
                                    <input type="text" class="form-control" id="edit_nome_completo" name="nome_completo" required>
                                    <div class="invalid-feedback">Por favor, informe o nome completo.</div>
                                </div>
                                <div class="col-md-6">
                                    <label for="edit_email" class="form-label">Email</label>
                                    <input type="email" class="form-control" id="edit_email" name="email" required>
                                    <div class="invalid-feedback">Por favor, informe um email válido.</div>
                                </div>
                            </div>

                            <div class="row mb-3">
                                <div class="col-md-6">
                                    <label for="edit_senha_nova" class="form-label">Nova Senha (deixe em branco para manter)</label>
                                    <div class="input-group">
                                        <input type="password" class="form-control" id="edit_senha_nova" name="senha_nova">
                                        <button class="btn btn-outline-secondary toggle-password" type="button">
                                            <i class="fas fa-eye"></i>
                                        </button>
                                    </div>
                                    <div class="form-text">Mínimo de 8 caracteres, incluindo maiúsculas, minúsculas e números.</div>
                                </div>
                                <div class="col-md-6">
                                    <label for="edit_confirmar_senha_nova" class="form-label">Confirmar Nova Senha</label>
                                    <div class="input-group">
                                        <input type="password" class="form-control" id="edit_confirmar_senha_nova" name="confirmar_senha_nova">
                                        <button class="btn btn-outline-secondary toggle-password" type="button">
                                            <i class="fas fa-eye"></i>
                                        </button>
                                    </div>
                                </div>
                            </div>

                            <div class="row mb-3">
                                <div class="col-md-6">
                                    <label for="edit_tipo" class="form-label">Tipo de Usuário</label>
                                    <select class="form-select" id="edit_tipo" name="tipo" required>
                                        <option value="">Selecione o tipo</option>
                                        <option value="admin">Administrador</option>
                                        <option value="suporte">Suporte</option>
                                        <option value="financeiro">Financeiro</option>
                                    </select>
                                    <div class="invalid-feedback">Por favor, selecione um tipo.</div>
                                </div>
                                <div class="col-md-6">
                                    <label for="edit_ativo" class="form-label">Status</label>
                                    <div class="form-check form-switch">
                                        <input class="form-check-input" type="checkbox" id="edit_ativo" name="ativo" value="1">
                                        <label class="form-check-label" for="edit_ativo">Ativo</label>
                                    </div>
                                </div>
                            </div>

                            <div class="mb-3">
                                <label class="form-label">Permissões</label>
                                <div class="row">
                                    <div class="col-md-4">
                                        <div class="form-check">
                                            <input class="form-check-input" type="checkbox" id="edit_perm_admin" name="permissoes[]" value="admin">
                                            <label class="form-check-label" for="edit_perm_admin">Administrador</label>
                                        </div>
                                    </div>
                                    <div class="col-md-4">
                                        <div class="form-check">
                                            <input class="form-check-input" type="checkbox" id="edit_perm_suporte" name="permissoes[]" value="suporte">
                                            <label class="form-check-label" for="edit_perm_suporte">Suporte</label>
                                        </div>
                                    </div>
                                    <div class="col-md-4">
                                        <div class="form-check">
                                            <input class="form-check-input" type="checkbox" id="edit_perm_financeiro" name="permissoes[]" value="financeiro">
                                            <label class="form-check-label" for="edit_perm_financeiro">Financeiro</label>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                        <div class="modal-footer">
                            <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancelar</button>
                            <button type="submit" class="btn btn-primary">Salvar Alterações</button>
                        </div>
            </form>
        </div>
    </div>
</div>

<!-- Modal para Excluir Usuário -->
<div class="modal fade" id="deleteUserModal" tabindex="-1" aria-labelledby="deleteUserModalLabel" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title" id="deleteUserModalLabel">Confirmar Exclusão</h5>
                <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
            </div>
            <div class="modal-body">
                <p>Tem certeza que deseja excluir o usuário <strong id="delete_user_name"></strong>?</p>
                <p class="text-danger">Esta ação não poderá ser desfeita.</p>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancelar</button>
                <form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post">
                    <input type="hidden" name="action" value="delete">
                    <input type="hidden" name="csrf_token" value="<?php echo htmlspecialchars($csrf_token); ?>">
                    <input type="hidden" name="id" id="delete_user_id">
                    <button type="submit" class="btn btn-danger">Excluir</button>
                </form>
            </div>
        </div>
    </div>
</div>

<script>
    // Validação de formulário
    (function() {
        'use strict';

        // Fetch all forms we want to apply validation to
        var forms = document.querySelectorAll('.needs-validation');

        // Loop and prevent submission if invalid
        Array.prototype.slice.call(forms).forEach(function(form) {
            form.addEventListener('submit', function(event) {
                if (!form.checkValidity()) {
                    event.preventDefault();
                    event.stopPropagation();
                }

                // Verifica se as senhas conferem no formulário de adição
                if (form.id === 'addUserForm') {
                    var senha = document.getElementById('senha_hash').value;
                    var confirmarSenha = document.getElementById('confirmar_senha').value;

                    if (senha !== confirmarSenha) {
                        event.preventDefault();
                        document.getElementById('confirmar_senha').setCustomValidity('As senhas não conferem');
                    } else {
                        document.getElementById('confirmar_senha').setCustomValidity('');
                    }
                }

                // Verifica se as senhas conferem no formulário de edição (só se uma nova senha foi informada)
                if (form.id === 'editUserForm') {
                    var novaSenha = document.getElementById('edit_senha_nova').value;
                    var confirmarNovaSenha = document.getElementById('edit_confirmar_senha_nova').value;

                    if (novaSenha && novaSenha !== confirmarNovaSenha) {
                        event.preventDefault();
                        document.getElementById('edit_confirmar_senha_nova').setCustomValidity('As senhas não conferem');
                    } else {
                        document.getElementById('edit_confirmar_senha_nova').setCustomValidity('');
                    }
                }

                form.classList.add('was-validated');
            }, false);
        });
    })();

    // Toggle password visibility
    document.querySelectorAll('.toggle-password').forEach(function(button) {
        button.addEventListener('click', function() {
            const passwordInput = this.previousElementSibling;
            const icon = this.querySelector('i');

            if (passwordInput.type === 'password') {
                passwordInput.type = 'text';
                icon.classList.remove('fa-eye');
                icon.classList.add('fa-eye-slash');
            } else {
                passwordInput.type = 'password';
                icon.classList.remove('fa-eye-slash');
                icon.classList.add('fa-eye');
            }
        });
    });

    // Carrega dados no modal de edição
    document.querySelectorAll('.edit-user').forEach(function(button) {
        button.addEventListener('click', function() {
            const id = this.getAttribute('data-id');
            const nome_usuario = this.getAttribute('data-nome-usuario');
            const nome_completo = this.getAttribute('data-nome-completo');
            const email = this.getAttribute('data-email');
            const tipo = this.getAttribute('data-tipo');
            const ativo = this.getAttribute('data-ativo') === '1';
            const permissoes = JSON.parse(this.getAttribute('data-permissoes'));

            // Preenche os campos no modal
            document.getElementById('edit_id').value = id;
            document.getElementById('edit_nome_usuario').value = nome_usuario;
            document.getElementById('edit_nome_completo').value = nome_completo;
            document.getElementById('edit_email').value = email;
            document.getElementById('edit_tipo').value = tipo;
            document.getElementById('edit_ativo').checked = ativo;

            // Limpa os checkboxes de permissões
            document.querySelectorAll('#editUserModal input[name="permissoes[]"]').forEach(function(checkbox) {
                checkbox.checked = false;
            });

            // Marca os checkboxes correspondentes às permissões do usuário
            permissoes.forEach(function(perm) {
                const checkbox = document.getElementById('edit_perm_' + perm);
                if (checkbox) {
                    checkbox.checked = true;
                }
            });
        });
    });

    // Carrega dados no modal de exclusão
    document.querySelectorAll('.delete-user').forEach(function(button) {
        button.addEventListener('click', function() {
            const id = this.getAttribute('data-id');
            const nome_usuario = this.getAttribute('data-nome-usuario');

            document.getElementById('delete_user_id').value = id;
            document.getElementById('delete_user_name').textContent = nome_usuario;
        });
    });

    // Atualiza permissões com base no tipo selecionado
    document.getElementById('tipo').addEventListener('change', function() {
        const tipo = this.value;

        // Limpa todos os checkboxes
        document.querySelectorAll('#addUserForm input[name="permissoes[]"]').forEach(function(checkbox) {
            checkbox.checked = false;
        });

        // Marca checkboxes baseado no tipo selecionado
        if (tipo === 'admin') {
            document.getElementById('perm_admin').checked = true;
            document.getElementById('perm_view_relatorios').checked = true;
            document.getElementById('perm_edit_precadastros').checked = true;
            document.getElementById('perm_process_api').checked = true;
        } else if (tipo === 'suporte') {
            document.getElementById('perm_suporte').checked = true;
            document.getElementById('perm_view_relatorios').checked = true;
            document.getElementById('perm_edit_precadastros').checked = true;
            document.getElementById('perm_process_api').checked = true;
        } else if (tipo === 'financeiro') {
            document.getElementById('perm_financeiro').checked = true;
            document.getElementById('perm_edit_precadastros').checked = true;
        }
    });

    // Faz o mesmo para o formulário de edição
    document.getElementById('edit_tipo').addEventListener('change', function() {
        const tipo = this.value;

        // Limpa todos os checkboxes
        document.querySelectorAll('#editUserForm input[name="permissoes[]"]').forEach(function(checkbox) {
            checkbox.checked = false;
        });

        // Marca checkboxes baseado no tipo selecionado
        if (tipo === 'admin') {
            document.getElementById('edit_perm_admin').checked = true;
            document.getElementById('edit_perm_view_relatorios').checked = true;
            document.getElementById('edit_perm_edit_precadastros').checked = true;
            document.getElementById('edit_perm_process_api').checked = true;
        } else if (tipo === 'gerente') {
            document.getElementById('edit_perm_suporte').checked = true;
            document.getElementById('edit_perm_view_relatorios').checked = true;
            document.getElementById('edit_perm_edit_precadastros').checked = true;
            document.getElementById('edit_perm_process_api').checked = true;
        } else if (tipo === 'financeiro') {
            document.getElementById('edit_perm_financeiro').checked = true;
            document.getElementById('edit_perm_edit_precadastros').checked = true;
        }
    });
</script>

<?php
// Incluir o footer
include_once 'includes/footer.php';
?>