<?php
session_start();

// Configurações de segurança
header('X-Frame-Options: DENY');
header('X-Content-Type-Options: nosniff');
header('X-XSS-Protection: 1; mode=block');
header('Strict-Transport-Security: max-age=31536000; includeSubDomains');

require_once 'conexao.php';

// Verificar se o usuário está logado como administrador
if (!isset($_SESSION['logado']) || $_SESSION['logado'] != 1 || $_SESSION['permissao'] !== 'admin') {
    $_SESSION['erro'] = 'Acesso negado: Permissão insuficiente.';
    header('Location: login.php');
    exit;
}

// Verificação robusta do tenant_id
$tenant_id = $_SESSION['tenant_id'] ?? null;
if (empty($tenant_id) || !is_numeric($tenant_id)) {
    $_SESSION['erro'] = 'Tenant ID inválido. Por favor, faça login novamente.';
    header('Location: logout.php');
    exit;
}

// Gerar token CSRF se não existir
if (!isset($_SESSION['csrf_token'])) {
    $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}

// Mensagens do sistema
if (isset($_SESSION['mensagem'])) {
    $mensagem = htmlspecialchars($_SESSION['mensagem']);
    echo <<<HTML
    <div class="alert alert-success" style="position: fixed; top: 80px; right: 20px; z-index: 2000;">
        {$mensagem}
    </div>
    <script>
        setTimeout(() => document.querySelector('.alert-success').remove(), 5000);
    </script>
HTML;
    unset($_SESSION['mensagem']);
}

// Variáveis do formulário
$erro = '';
$valores = [
    'nome' => '',
    'email' => '',
    'permissao' => ''
];

// Processar o formulário
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // Validar token CSRF
    if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
        $erro = 'Token de segurança inválido.';
    } else {
        // Sanitizar entradas
        $valores['nome'] = trim($_POST['nome'] ?? '');
        $valores['email'] = trim($_POST['email'] ?? '');
        $senha = trim($_POST['senha'] ?? '');
        $confirmar_senha = trim($_POST['confirmar_senha'] ?? '');
        $valores['permissao'] = $_POST['permissao'] ?? '';

        // Validações
        if (empty($valores['nome']) || empty($valores['email']) || empty($senha) || empty($valores['permissao'])) {
            $erro = 'Todos os campos são obrigatórios.';
        } elseif (!filter_var($valores['email'], FILTER_VALIDATE_EMAIL)) {
            $erro = 'Formato de e-mail inválido.';
        } elseif (strlen($senha) < 8) {
            $erro = 'A senha deve ter no mínimo 8 caracteres.';
        } elseif (!preg_match('/[A-Z]/', $senha) || !preg_match('/[0-9]/', $senha)) {
            $erro = 'A senha deve conter pelo menos uma letra maiúscula e um número.';
        } elseif ($senha !== $confirmar_senha) {
            $erro = 'As senhas não coincidem.';
        }

        if (empty($erro)) {
            // Verificar se e-mail já existe para este tenant
            $stmt = $conn->prepare("SELECT id FROM usuarios WHERE email = ? AND tenant_id = ?");
            $stmt->bind_param("si", $valores['email'], $tenant_id);
            $stmt->execute();
            $stmt->store_result();

            if ($stmt->num_rows > 0) {
                $erro = 'Este e-mail já está cadastrado para este tenant.';
            } else {
                // Hash da senha
                $senha_hash = password_hash($senha, PASSWORD_DEFAULT);

                // Inserir usuário com transação
                $conn->begin_transaction();
                try {
                    $stmt = $conn->prepare("INSERT INTO usuarios 
                        (nome, email, senha, permissao, tenant_id, data_criacao, criado_por) 
                        VALUES (?, ?, ?, ?, ?, NOW(), ?)");
                    $stmt->bind_param("ssssii", 
                        $valores['nome'], 
                        $valores['email'], 
                        $senha_hash, 
                        $valores['permissao'], 
                        $tenant_id,
                        $_SESSION['usuario_id']);

                    if ($stmt->execute()) {
                        $conn->commit();
                        $_SESSION['mensagem'] = 'Usuário cadastrado com sucesso!';
                        header('Location: cadastrar_usuario.php');
                        exit;
                    } else {
                        throw new Exception("Erro ao cadastrar usuário: " . $conn->error);
                    }
                } catch (Exception $e) {
                    $conn->rollback();
                    $erro = $e->getMessage();
                }
            }
            $stmt->close();
        }
    }
}
?>

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Cadastrar Usuário - Sistema Multitenant</title>
    <meta name="csrf-token" content="<?= htmlspecialchars($_SESSION['csrf_token']) ?>">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.0/font/bootstrap-icons.css">
    <style>
        :root {
            --primary-color: #3498db;
            --danger-color: #e74c3c;
            --success-color: #2ecc71;
        }
        body {
            background-color: #f8f9fa;
        }
        .card {
            border-radius: 10px;
            box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
        }
        .form-control:focus {
            border-color: var(--primary-color);
            box-shadow: 0 0 0 0.25rem rgba(52, 152, 219, 0.25);
        }
        .btn-primary {
            background-color: var(--primary-color);
            border-color: var(--primary-color);
        }
        .tenant-badge {
            background-color: #6c757d;
            color: white;
            padding: 3px 8px;
            border-radius: 10px;
            font-size: 0.8rem;
        }
        .password-strength {
            height: 5px;
            background: #e9ecef;
            border-radius: 3px;
            overflow: hidden;
        }
        .password-strength-bar {
            height: 100%;
            width: 0%;
            background: #dc3545;
            transition: width 0.3s, background 0.3s;
        }
    </style>
</head>
<body>
    <?php include 'navbar.php'; ?>

    <div class="container py-5">
        <div class="row justify-content-center">
            <div class="col-lg-8">
                <div class="card">
                    <div class="card-header bg-white">
                        <div class="d-flex justify-content-between align-items-center">
                            <h4 class="mb-0">Cadastrar Novo Usuário</h4>
                            <span class="tenant-badge">
                                Tenant ID: <?= htmlspecialchars($tenant_id) ?>
                            </span>
                        </div>
                    </div>
                    <div class="card-body">
                        <?php if ($erro): ?>
                            <div class="alert alert-danger"><?= htmlspecialchars($erro) ?></div>
                        <?php endif; ?>

                        <form method="post" id="userForm">
                            <input type="hidden" name="csrf_token" value="<?= htmlspecialchars($_SESSION['csrf_token']) ?>">

                            <div class="mb-3">
                                <label for="nome" class="form-label">Nome Completo</label>
                                <input type="text" class="form-control" id="nome" name="nome" 
                                    value="<?= htmlspecialchars($valores['nome']) ?>" required>
                            </div>

                            <div class="mb-3">
                                <label for="email" class="form-label">E-mail</label>
                                <input type="email" class="form-control" id="email" name="email" 
                                    value="<?= htmlspecialchars($valores['email']) ?>" required>
                            </div>

                            <div class="mb-3">
                                <label for="senha" class="form-label">Senha</label>
                                <input type="password" class="form-control" id="senha" name="senha" required
                                    minlength="8" oninput="checkPasswordStrength()">
                                <div class="password-strength mt-1">
                                    <div class="password-strength-bar" id="passwordStrengthBar"></div>
                                </div>
                                <small class="text-muted">Mínimo 8 caracteres, com pelo menos 1 letra maiúscula e 1 número</small>
                            </div>

                            <div class="mb-3">
                                <label for="confirmar_senha" class="form-label">Confirmar Senha</label>
                                <input type="password" class="form-control" id="confirmar_senha" name="confirmar_senha" required
                                    minlength="8" oninput="checkPasswordMatch()">
                                <small id="passwordMatchFeedback" class="d-block"></small>
                            </div>

                            <div class="mb-4">
                                <label for="permissao" class="form-label">Tipo de Usuário</label>
                                <select class="form-select" id="permissao" name="permissao" required>
                                    <option value="">Selecione...</option>
                                    <option value="admin" <?= $valores['permissao'] === 'admin' ? 'selected' : '' ?>>Administrador</option>
                                    <option value="gerente" <?= $valores['permissao'] === 'gerente' ? 'selected' : '' ?>>Gerente</option>
                                    <option value="usuario" <?= $valores['permissao'] === 'usuario' ? 'selected' : '' ?>>Usuário Padrão</option>
                                </select>
                            </div>

                            <div class="d-grid gap-2 d-md-flex justify-content-md-end">
                                <a href="gerenciar_usuarios.php" class="btn btn-secondary me-md-2">
                                    <i class="bi bi-arrow-left"></i> Voltar
                                </a>
                                <button type="submit" class="btn btn-primary">
                                    <i class="bi bi-person-plus"></i> Cadastrar Usuário
                                </button>
                            </div>
                        </form>
                    </div>
                </div>
            </div>
        </div>
    </div>

    <script>
        function checkPasswordStrength() {
            const password = document.getElementById('senha').value;
            const strengthBar = document.getElementById('passwordStrengthBar');
            let strength = 0;

            if (password.length >= 8) strength += 25;
            if (password.length >= 12) strength += 15;
            if (/[A-Z]/.test(password)) strength += 20;
            if (/[0-9]/.test(password)) strength += 20;
            if (/[^A-Za-z0-9]/.test(password)) strength += 20;

            strengthBar.style.width = strength + '%';
            if (strength > 75) {
                strengthBar.style.backgroundColor = '#28a745';
            } else if (strength > 50) {
                strengthBar.style.backgroundColor = '#ffc107';
            } else {
                strengthBar.style.backgroundColor = '#dc3545';
            }
        }

        function checkPasswordMatch() {
            const password = document.getElementById('senha').value;
            const confirmPassword = document.getElementById('confirmar_senha').value;
            const feedback = document.getElementById('passwordMatchFeedback');

            if (confirmPassword.length === 0) {
                feedback.textContent = '';
                feedback.className = 'd-block text-muted';
            } else if (password === confirmPassword) {
                feedback.textContent = 'As senhas coincidem!';
                feedback.className = 'd-block text-success';
            } else {
                feedback.textContent = 'As senhas não coincidem!';
                feedback.className = 'd-block text-danger';
            }
        }

        document.getElementById('userForm').addEventListener('submit', function(e) {
            const password = document.getElementById('senha').value;
            const confirmPassword = document.getElementById('confirmar_senha').value;

            if (password !== confirmPassword) {
                e.preventDefault();
                alert('As senhas não coincidem!');
            }
        });
    </script>
</body>
</html>

<?php
if (isset($conn)) {
    $conn->close();
}
?>
