<?php
// Referenciando o arquivo de conexão
require 'conexao.php';
require __DIR__ . '/../sessao.php';
// Recebendo variáveis para a verificação do acesso
$pSessaoPerfil = $_SESSION["CodPerfil"];
$pPath = $_SERVER["REQUEST_URI"];

// Extraindo o caminho base da URL (sem parâmetros)
$parsedUrl = parse_url($pPath);
$basePath = $parsedUrl['path'];
// Se o caminho base não termina com ".php", ajusta para incluir o nome do arquivo
if (!preg_match('/\.php$/', $basePath)) {
    $basePath .= basename($pPath);
}

if ($_SESSION['login'] !== 'mandareceita') {

    // Caso a sessão perfil seja administrador, o acesso é completo
    if ($pSessaoPerfil !== '1') {
        $strSQLACESSO0 = "SELECT DISTINCT M.id_modulo, M.MODULO " .
            "FROM MODULO M " .
            "INNER JOIN perfil_modulo PM ON M.id_modulo = PM.id_modulo " .
            "WHERE M.CAMINHO LIKE '" . $basePath . "%'";

        $objRsAcesso0 = $connectionmysql->query($strSQLACESSO0);

        if ($objRsAcesso0->num_rows > 1) {
            $strSQLACESSO = "SELECT M.MODULO, M.CAMINHO " .
                "FROM kpi.MODULO M " .
                "LEFT JOIN kpi.perfil_modulo PM ON M.id_modulo = PM.id_modulo AND PM.id_perfil = '$pSessaoPerfil' " .
                "WHERE M.CAMINHO LIKE '$basePath%' " .
                "AND PM.id_modulo IS NULL";

            // Executando a consulta
            $objRsAcesso = $connectionmysql->query($strSQLACESSO);

            // Verificando se há resultados
            if ($objRsAcesso->num_rows > 0) {
                // Obter todos os módulos retornados pela consulta
                $modulosNaoPermitidos = [];
                while ($row = $objRsAcesso->fetch_assoc()) {
                    $modulosNaoPermitidos[] = $row['CAMINHO'];
                }

                // Verificar se o caminho atual está entre os módulos não permitidos
                $currentPath = strtok($_SERVER['REQUEST_URI'], '?'); // Remove os parâmetros de consulta
                foreach ($modulosNaoPermitidos as $modulo) {
                    if ($currentPath === $modulo) {
                        header("Location: ../acesso_negado.php");
                        exit;
                    }
                }
            }
        } else {
            // Verificando se tem permissão para acessar a página
            $strSQLACESSO2 = "SELECT M.id_modulo, M.MODULO " .
                "FROM MODULO M " .
                "INNER JOIN perfil_modulo PM ON M.id_modulo = PM.id_modulo " .
                "WHERE PM.id_perfil = '$pSessaoPerfil' AND M.CAMINHO  LIKE '$basePath%'";

            $objRsAcesso2 = $connectionmysql->query($strSQLACESSO2);

            if ($objRsAcesso2->num_rows == 0) {
                header("Location: ../acesso_negado.php");
                exit;
            }
        }
    }
    // Consulta para buscar os valores armazenados no banco
    $sql = "SELECT m.id_modulo as id, m.modulo as nome, m.caminho, m.descricao,p.nome_pacote
        FROM pacote p
        INNER JOIN modulo m on  m.id_pacote =p.id 
        WHERE p.status = 'Ativo'";

    $result = $connectionmysql->query($sql);
    $dados_modulo = [];
    // Se encontrar os valores, retorna o correspondente
    if ($result && $result->num_rows > 0) {
        while ($row = $result->fetch_assoc()) {
            $dados_modulo[] = $row;  // adiciona cada registro ao array
        }
    }
    // Normaliza o caminho atual e os caminhos vindos do banco
    // para evitar problemas de maiúsculas/minúsculas e barras ("/" x "\\").
    $basePath = strtolower(str_replace('\\', '/', $basePath));
    $modulos_caminhos = array_map(function ($caminho) {
        return strtolower(str_replace('\\', '/', $caminho));
    }, array_column($dados_modulo, 'caminho'));

    // Verifica se o caminho atual está explicitamente cadastrado
    // Importante: a permissão agora é sempre por arquivo exato (caminho completo),
    // evitando liberar automaticamente todos os arquivos de um diretório quando
    // apenas um módulo/página daquele diretório pertence a um pacote.
    $permitido = in_array($basePath, $modulos_caminhos);

    if (!$permitido) {
        header("Location: ../acesso_negado_pacote.php");
        exit;
        //var_dump($basePath);
    }
}
