<?php
session_start();
require_once 'conexao.php';

// VERIFICAÇÃO DE PERMISSÃO
$temPermissao = false;
$usuario_permissao = '';
$usuario_tenant_id = null;

// Verifica ambas as estruturas de sessão
if (isset($_SESSION['logado']) && $_SESSION['logado'] && isset($_SESSION['permissao'])) {
    $usuario_permissao = $_SESSION['permissao'];
    $temPermissao = in_array($usuario_permissao, ['admin', 'super_admin']);
    if (isset($_SESSION['tenant_id'])) {
        $usuario_tenant_id = $_SESSION['tenant_id'];
    }
}

if (isset($_SESSION['usuario']) && isset($_SESSION['usuario']['permissao'])) {
    $usuario_permissao = $_SESSION['usuario']['permissao'];
    $temPermissao = in_array($usuario_permissao, ['admin', 'super_admin']);
    if (isset($_SESSION['usuario']['tenant_id'])) {
        $usuario_tenant_id = $_SESSION['usuario']['tenant_id'];
    }
}

if (!$temPermissao) {
    header("HTTP/1.1 403 Forbidden");
    echo "Acesso restrito: apenas administradores podem acessar esta página.";
    exit;
}

// DEBUG: Verificar sessão
error_log("DEBUG: Permissão: $usuario_permissao, Tenant ID da sessão: " . ($usuario_tenant_id ?? 'NULL'));

// Quando o formulário for enviado
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['nome'])) {
    // Recebe dados do formulário
    $nome = trim($_POST['nome'] ?? '');
    $login = trim($_POST['login'] ?? '');
    $senha = trim($_POST['senha'] ?? '');
    $email = trim($_POST['email'] ?? '');
    $ativo = trim($_POST['ativo'] ?? '');
    $permissao = trim($_POST['permissao'] ?? 'usuario');
    
    // IMPORTANTE: Obter o tenant_id
    $tenant_id = null;
    
    // 1. Tentar do campo específico do formulário (para super_admin)
    if (isset($_POST['tenant_id']) && !empty($_POST['tenant_id'])) {
        $tenant_id = (int)$_POST['tenant_id'];
        error_log("DEBUG: Tenant ID do formulário: $tenant_id");
    }
    // 2. Tentar da sessão do usuário atual
    elseif ($usuario_tenant_id !== null) {
        $tenant_id = (int)$usuario_tenant_id;
        error_log("DEBUG: Tenant ID da sessão do usuário: $tenant_id");
    }
    // 3. Se for super_admin sem tenant específico, pegar o primeiro tenant
    elseif ($usuario_permissao === 'super_admin' && empty($_POST['tenant_id'])) {
        // Buscar o primeiro tenant disponível
        $stmt = $conn->prepare("SELECT id FROM tenants LIMIT 1");
        $stmt->execute();
        $result = $stmt->get_result();
        if ($row = $result->fetch_assoc()) {
            $tenant_id = (int)$row['id'];
            error_log("DEBUG: Tenant ID do primeiro tenant: $tenant_id");
        }
        $stmt->close();
    }
    
    error_log("DEBUG: Tenant ID final antes da validação: " . ($tenant_id ?? 'NULL'));

    // Validações básicas
    $erro = '';
    if (empty($tenant_id) || $tenant_id <= 0) {
        $erro = 'Erro: Tenant ID inválido ou não especificado.';
        error_log("ERRO: Tenant ID inválido: " . ($tenant_id ?? 'NULL'));
    } elseif (empty($nome) || empty($email) || empty($ativo) || empty($permissao)) {
        $erro = 'Por favor, preencha todos os campos obrigatórios.';
    } else {
        // Validar se o tenant existe
        $stmt_check = $conn->prepare("SELECT id, nome FROM tenants WHERE id = ?");
        $stmt_check->bind_param("i", $tenant_id);
        $stmt_check->execute();
        $result_check = $stmt_check->get_result();
        
        if ($result_check->num_rows === 0) {
            $erro = 'Tenant não encontrado. ID: ' . $tenant_id;
            error_log("ERRO: Tenant não encontrado: $tenant_id");
        } else {
            $tenant_info = $result_check->fetch_assoc();
            error_log("DEBUG: Tenant encontrado: " . $tenant_info['nome'] . " (ID: " . $tenant_info['id'] . ")");
            
            // Validar se a permissão é permitida
            $permissoes_validas = ['super_admin', 'admin', 'usuario', 'vendedor'];
            if (!in_array($permissao, $permissoes_validas)) {
                $erro = 'Permissão inválida.';
            } else {
                // Verificar se email já existe no mesmo tenant
                $stmt_email = $conn->prepare("SELECT id FROM cliente_tvitec WHERE email = ? AND tenant_id = ?");
                $stmt_email->bind_param("si", $email, $tenant_id);
                $stmt_email->execute();
                $result_email = $stmt_email->get_result();
                
                if ($result_email->num_rows > 0) {
                    $erro = 'Este e-mail já está cadastrado para este tenant.';
                } else {
                    // Criar hash da senha, se preenchida
                    $senha_hash = $senha ? password_hash($senha, PASSWORD_DEFAULT) : null;

                    // Query preparada para inserir
                    $sql = "INSERT INTO cliente_tvitec (tenant_id, nome, login, senha, email, ativo, permissao) 
                            VALUES (?, ?, ?, ?, ?, ?, ?)";
                    $stmt = $conn->prepare($sql);
                    if (!$stmt) {
                        $erro = "Erro na preparação da query: " . $conn->error;
                    } else {
                        // Substitui valores NULL por strings vazias para bind_param
                        $login = $login ?: '';
                        $senha_hash = $senha_hash ?: '';

                        // Bind dos parâmetros - IMPORTANTE: tenant_id como inteiro (i)
                        $stmt->bind_param(
                            "issssss",
                            $tenant_id,      // i - inteiro
                            $nome,           // s - string
                            $login,          // s - string
                            $senha_hash,     // s - string
                            $email,          // s - string
                            $ativo,          // s - string
                            $permissao       // s - string
                        );

                        // Executa e verifica
                        if ($stmt->execute()) {
                            $sucesso = "Usuário cadastrado com sucesso para o tenant '{$tenant_info['nome']}' (ID: $tenant_id)!";
                            $id_inserido = $stmt->insert_id;
                            error_log("SUCESSO: Usuário inserido com ID: $id_inserido para Tenant ID: $tenant_id");
                            
                            // Limpar campos do formulário após sucesso
                            $nome = $login = $email = $senha = '';
                        } else {
                            $erro = "Erro ao cadastrar usuário: " . $stmt->error;
                            error_log("ERRO SQL: " . $stmt->error);
                        }

                        $stmt->close();
                    }
                }
                $stmt_email->close();
            }
        }
        $stmt_check->close();
    }
}

// Buscar lista de tenants disponíveis (apenas para super_admin)
$tenants = [];
if ($usuario_permissao === 'super_admin') {
    $result_tenants = $conn->query("SELECT id, nome FROM tenants ORDER BY nome");
    if ($result_tenants) {
        while ($row = $result_tenants->fetch_assoc()) {
            $tenants[] = $row;
        }
    }
    error_log("DEBUG: Número de tenants encontrados: " . count($tenants));
}
?>

<!-- Formulário para cadastro -->
<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <title>Cadastrar Usuário</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            margin: 20px;
            background-color: #f5f5f5;
        }
        .container {
            max-width: 800px;
            margin: 0 auto;
            background: white;
            padding: 25px;
            border-radius: 8px;
            box-shadow: 0 0 10px rgba(0,0,0,0.1);
        }
        h2 {
            color: #333;
            border-bottom: 1px solid #eee;
            padding-bottom: 10px;
        }
        .form-group {
            margin-bottom: 20px;
        }
        label {
            display: block;
            margin-bottom: 8px;
            font-weight: 600;
            color: #2c3e50;
        }
        .required:after {
            content: " *";
            color: #e74c3c;
        }
        input, select {
            width: 100%;
            padding: 10px 12px;
            border: 1px solid #ddd;
            border-radius: 4px;
            font-size: 16px;
        }
        input:focus, select:focus {
            border-color: #3498db;
            outline: none;
            box-shadow: 0 0 0 2px rgba(52, 152, 219, 0.2);
        }
        button {
            padding: 10px 18px;
            border: none;
            border-radius: 4px;
            color: white;
            cursor: pointer;
            font-size: 16px;
            transition: all 0.3s;
        }
        button[type="submit"] {
            background-color: #2ecc71;
        }
        button[type="submit"]:hover {
            background-color: #27ae60;
        }
        .msg {
            padding: 10px;
            margin: 10px 0;
            border-radius: 4px;
        }
        .error {
            background-color: #ffdddd;
            color: #d8000c;
        }
        .success {
            background-color: #ddffdd;
            color: #4F8A10;
        }
        .info {
            background-color: #e8f4fc;
            color: #0066cc;
            padding: 15px;
            border-radius: 4px;
            margin-bottom: 20px;
            border-left: 4px solid #3498db;
        }
        .debug-info {
            background-color: #f8f9fa;
            color: #666;
            padding: 10px;
            border-radius: 4px;
            font-size: 12px;
            margin-bottom: 10px;
            border-left: 3px solid #6c757d;
        }
    </style>
</head>
<body>
    <div class="container">
        <h2>Cadastrar Usuário</h2>
        
        <!-- Debug info (remover em produção) -->
        <div class="debug-info">
            <strong>Debug Info:</strong><br>
            Permissão do usuário: <?php echo htmlspecialchars($usuario_permissao); ?><br>
            Tenant ID da sessão: <?php echo htmlspecialchars($usuario_tenant_id ?? 'NULL'); ?><br>
            Total de tenants disponíveis: <?php echo count($tenants); ?>
        </div>
        
        <?php if (isset($erro)): ?>
            <div class="msg error"><?php echo htmlspecialchars($erro); ?></div>
        <?php endif; ?>
        
        <?php if (isset($sucesso)): ?>
            <div class="msg success"><?php echo htmlspecialchars($sucesso); ?></div>
        <?php endif; ?>
        
        <?php if ($usuario_tenant_id && $usuario_permissao !== 'super_admin'): ?>
            <div class="info">
                <strong>Informação:</strong> Você está cadastrando um usuário para o seu próprio tenant.
                <?php 
                // Mostrar nome do tenant se possível
                $stmt_tenant_name = $conn->prepare("SELECT nome FROM tenants WHERE id = ?");
                $stmt_tenant_name->bind_param("i", $usuario_tenant_id);
                $stmt_tenant_name->execute();
                $result_tenant_name = $stmt_tenant_name->get_result();
                if ($row = $result_tenant_name->fetch_assoc()) {
                    echo "Tenant: " . htmlspecialchars($row['nome']) . " (ID: $usuario_tenant_id)";
                }
                $stmt_tenant_name->close();
                ?>
            </div>
        <?php endif; ?>
        
        <form method="post" action="">
            <?php if ($usuario_permissao === 'super_admin' && !empty($tenants)): ?>
                <div class="form-group">
                    <label for="tenant_id" class="required">Selecione o Tenant</label>
                    <select name="tenant_id" id="tenant_id" required>
                        <option value="">Selecione um tenant...</option>
                        <?php foreach ($tenants as $tenant): ?>
                            <option value="<?php echo $tenant['id']; ?>" 
                                <?php echo (isset($_POST['tenant_id']) && $_POST['tenant_id'] == $tenant['id']) ? 'selected' : ''; ?>>
                                <?php echo htmlspecialchars($tenant['nome'] . ' (ID: ' . $tenant['id'] . ')'); ?>
                            </option>
                        <?php endforeach; ?>
                    </select>
                    <small>Como super admin, você pode selecionar qualquer tenant</small>
                </div>
            <?php elseif ($usuario_tenant_id): ?>
                <div class="form-group">
                    <label>Tenant</label>
                    <input type="text" value="Seu tenant (ID: <?php echo $usuario_tenant_id; ?>)" readonly style="background-color: #f0f0f0;">
                    <input type="hidden" name="tenant_id" value="<?php echo $usuario_tenant_id; ?>">
                    <small>Você está cadastrando para seu próprio tenant</small>
                </div>
            <?php else: ?>
                <div class="msg error">
                    Erro: Não foi possível determinar o tenant. Contacte o administrador.
                </div>
            <?php endif; ?>
            
            <div class="form-group">
                <label for="nome" class="required">Nome</label>
                <input type="text" name="nome" id="nome" maxlength="20" 
                       value="<?php echo htmlspecialchars($nome ?? ''); ?>" required>
            </div>
            
            <div class="form-group">
                <label for="login">Login</label>
                <input type="text" name="login" id="login" maxlength="150"
                       value="<?php echo htmlspecialchars($login ?? ''); ?>">
                <small>Opcional. Se não informado, o email será usado como login</small>
            </div>
            
            <div class="form-group">
                <label for="senha">Senha</label>
                <input type="password" name="senha" id="senha" minlength="8">
                <small>Deixe em branco para gerar uma senha aleatória e enviar por email</small>
            </div>
            
            <div class="form-group">
                <label for="email" class="required">Email</label>
                <input type="email" name="email" id="email" maxlength="255"
                       value="<?php echo htmlspecialchars($email ?? ''); ?>" required>
            </div>
            
            <div class="form-group">
                <label for="ativo" class="required">Ativo</label>
                <select name="ativo" id="ativo" required>
                    <option value="sim" <?php echo (isset($ativo) && $ativo == 'sim') ? 'selected' : ''; ?>>Sim</option>
                    <option value="nao" <?php echo (isset($ativo) && $ativo == 'nao') ? 'selected' : ''; ?>>Não</option>
                </select>
            </div>
            
            <div class="form-group">
                <label for="permissao" class="required">Permissão</label>
                <select name="permissao" id="permissao" required>
                    <?php if ($usuario_permissao === 'super_admin'): ?>
                        <option value="super_admin" <?php echo (isset($permissao) && $permissao == 'super_admin') ? 'selected' : ''; ?>>Super Admin</option>
                    <?php endif; ?>
                    <option value="admin" <?php echo (isset($permissao) && $permissao == 'admin') ? 'selected' : ''; ?>>Admin</option>
                    <option value="usuario" <?php echo (!isset($permissao) || $permissao == 'usuario') ? 'selected' : ''; ?>>Usuário</option>
                    <option value="vendedor" <?php echo (isset($permissao) && $permissao == 'vendedor') ? 'selected' : ''; ?>>Vendedor</option>
                </select>
            </div>
            
            <?php if (isset($tenant_id) && $tenant_id > 0): ?>
                <button type="submit">Cadastrar Usuário para Tenant ID: <?php echo $tenant_id; ?></button>
            <?php else: ?>
                <button type="submit">Cadastrar Usuário</button>
            <?php endif; ?>
        </form>
    </div>
</body>
</html>

<?php
$conn->close();
?>