<?php
session_start(); // Inicia a sessão, obrigatório para acessar $_SESSION

// Verifica se o usuário está logado
if (!isset($_SESSION['logado']) || $_SESSION['logado'] !== true) {
    echo "Acesso negado.";
    exit;
}

// Usa as chaves corretas da sessão conforme Login.php
$isSuperAdmin = isset($_SESSION['permissao']) && $_SESSION['permissao'] === 'super_admin';

require_once '../conexao.php';
require_once '../PHPMailer/src/PHPMailer.php';
require_once '../PHPMailer/src/SMTP.php';
require_once '../PHPMailer/src/Exception.php';

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

$erro = '';
$sucesso = '';

// Função para gerar senha aleatória
function gerarSenhaAleatoria($tamanho = 12) {
    $caracteres = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()';
    $senha = '';
    for ($i = 0; $i < $tamanho; $i++) {
        $senha .= $caracteres[random_int(0, strlen($caracteres) - 1)];
    }
    return $senha;
}

// Função para enviar e-mail com PHPMailer
function enviarEmail($destinatario, $nome, $senha) {
    $mail = new PHPMailer(true);

    try {
        $mail->isSMTP();
        $mail->Host       = 'ns242.hostgator.com.br';
        $mail->SMTPAuth   = true;
        $mail->Username   = 'moderador@son.tvitecnologia.com.br';
        $mail->Password   = 'Aa1029@#';
        $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
        $mail->Port       = 587;

        $mail->setFrom('recuperacao@son.tvitecnologia.com.br', 'Sistema de Cadastro');
        $mail->addAddress($destinatario, $nome);
        $mail->addReplyTo('suporte@son.tvitecnologia.com.br', 'Suporte');

        $mail->isHTML(true);
        $mail->Subject = 'Seu cadastro foi realizado com sucesso';
        $mail->Body = "
            <html><body>
            <h2>Olá {$nome},</h2>
            <p>Seu cadastro foi realizado com sucesso!</p>
            <p><strong>E-mail:</strong> {$destinatario}</p>
            <p><strong>Senha temporária:</strong> <strong>{$senha}</strong></p>
            <p>Recomendamos que altere esta senha após o primeiro login.</p>
            </body></html>";
        $mail->AltBody = "Olá {$nome},\n\nSeu cadastro foi realizado com sucesso!\n\nE-mail: {$destinatario}\nSenha: {$senha}\n\nRecomendamos que altere esta senha após o primeiro login.";

        $mail->send();
        return true;
    } catch (Exception $e) {
        error_log("Erro ao enviar e-mail: " . $mail->ErrorInfo);
        return false;
    }
}

// Processamento do formulário
if ($_SERVER['REQUEST_METHOD'] === 'POST') {

    if (!$isSuperAdmin) {
        $erro = 'Apenas super administradores podem cadastrar novos tenants.';
    } else {
        $gerarSenhaAutomatica = isset($_POST['gerar_senha_automatica']);

        $nome_empresa = trim($_POST['nome_empresa'] ?? '');
        $nome_admin   = trim($_POST['nome_admin'] ?? '');
        $email        = filter_input(INPUT_POST, 'email_admin', FILTER_SANITIZE_EMAIL);
        $permissao    = $_POST['permissao'] ?? 'admin';

        $senha = $gerarSenhaAutomatica ? gerarSenhaAleatoria() : ($_POST['senha_admin'] ?? '');

        // Validações básicas
        if (empty($nome_admin) || empty($email) || empty($permissao)) {
            $erro = 'Preencha todos os campos obrigatórios.';
        } elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
            $erro = 'E-mail inválido.';
        } elseif (!$gerarSenhaAutomatica && strlen($senha) < 8) {
            $erro = 'A senha deve ter pelo menos 8 caracteres.';
        } else {
            // Verifica se email já está cadastrado
            $stmt = $conn->prepare("SELECT id FROM usuarios WHERE email = ?");
            $stmt->bind_param("s", $email);
            $stmt->execute();
            $resultado = $stmt->get_result();

            if ($resultado->num_rows > 0) {
                $erro = 'Este e-mail já está em uso.';
            } else {
                $senha_hash = password_hash($senha, PASSWORD_DEFAULT);
                $ativo = 'sim';

                if ($permissao === 'super_admin') {
                    $stmt = $conn->prepare("INSERT INTO usuarios (nome, email, senha, permissao, ativo) VALUES (?, ?, ?, ?, ?)");
                    if (!$stmt) {
                        $erro = 'Erro na preparação da consulta: ' . $conn->error;
                    } else {
                        $stmt->bind_param("sssss", $nome_admin, $email, $senha_hash, $permissao, $ativo);
                    }
                } else {
                    $stmt_tenant = $conn->prepare("INSERT INTO tenants (nome) VALUES (?)");
                    if (!$stmt_tenant) {
                        $erro = 'Erro na preparação da consulta tenant: ' . $conn->error;
                    } else {
                        $stmt_tenant->bind_param("s", $nome_empresa);
                        if (!$stmt_tenant->execute()) {
                            $erro = 'Erro ao cadastrar o tenant.';
                        } else {
                            $tenant_id = $stmt_tenant->insert_id;
                            $stmt_tenant->close();

                            $stmt = $conn->prepare("INSERT INTO usuarios (nome, email, senha, permissao, ativo, tenant_id) VALUES (?, ?, ?, ?, ?, ?)");
                            if (!$stmt) {
                                $erro = 'Erro na preparação da consulta usuário: ' . $conn->error;
                            } else {
                                $stmt->bind_param("sssssi", $nome_admin, $email, $senha_hash, $permissao, $ativo, $tenant_id);
                            }
                        }
                    }
                }

                if (empty($erro) && $stmt && $stmt->execute()) {
                    $emailEnviado = enviarEmail($email, $nome_admin, $senha);
                    $sucesso = $emailEnviado
                        ? 'Usuário cadastrado com sucesso e e-mail enviado!'
                        : 'Usuário cadastrado, mas falha ao enviar o e-mail.';
                } elseif (empty($erro)) {
                    $erro = 'Erro ao cadastrar usuário: ' . $stmt->error;
                }

                if (isset($stmt) && $stmt !== false) {
                    $stmt->close();
                }
            }

            $conn->close();
        }
    }
}
?>
