<?php
if (is_file(__DIR__ . '/../conexao/conexao.php')) {
    require_once(__DIR__ . '/../conexao/conexao.php');
} else {
    require_once(__DIR__ . '/../../conexao/conexao.php');
}

function gerarLog($tipo_log, $modulo, $id_usuario, $nome_usuario)
{
    try {
        global $connectionmysql;

        // Buscar o id_modulo pelo caminho
        $query_get_modulo = "SELECT id_modulo FROM modulo m WHERE caminho = ?";
        $stmt = $connectionmysql->prepare($query_get_modulo);

        if (!$stmt) {
            throw new Exception("Erro ao preparar a query de módulo: " . $connectionmysql->error);
        }

        $stmt->bind_param("s", $modulo);
        $stmt->execute();
        $result = $stmt->get_result();

        if (!$result || $result->num_rows == 0) {
            throw new Exception("Módulo não encontrado para o caminho: $modulo");
        }

        $row = $result->fetch_assoc();
        $id_modulo = $row['id_modulo'];
        $stmt->close();

        // Verifica cooldown apenas se for tipo_log == 1
        if ($tipo_log == 1) {
            $current_time = time();
            $cooldown_period = 300; // 5 minutos

            $query_ultimo_log = "SELECT MAX(data_criacao) as ultimo_log 
                                 FROM logs 
                                 WHERE id_tipo_log = 1 
                                 AND id_usuario = ? 
                                 AND modulo = ?";

            $stmt = $connectionmysql->prepare($query_ultimo_log);
            if ($stmt) {
                $stmt->bind_param("ss", $id_usuario, $id_modulo);
                $stmt->execute();
                $result = $stmt->get_result();
                $row = $result->fetch_assoc();
                $stmt->close();

                if ($row && $row['ultimo_log']) {
                    $ultimo_log_time = strtotime($row['ultimo_log']);

                    if (($current_time - $ultimo_log_time) < $cooldown_period) {
                        return true; // Ignora o log porque ainda está no intervalo
                    }
                }
            }
        }

        // Prepara a query de inserção
        $query = "INSERT INTO logs (id_tipo_log, modulo, id_usuario, nome_usuario, data_criacao) 
                 VALUES (?, ?, ?, ?, CURRENT_TIMESTAMP)";

        $stmt = $connectionmysql->prepare($query);

        if ($stmt) {
            $stmt->bind_param(
                "isss",
                $tipo_log,
                $id_modulo,
                $id_usuario,
                $nome_usuario
            );

            $resultado = $stmt->execute();
            $stmt->close();

            if ($resultado) {
                return true;
            } else {
                throw new Exception("Erro ao inserir log no banco de dados: " . $connectionmysql->error);
            }
        } else {
            throw new Exception("Erro ao preparar a query: " . $connectionmysql->error);
        }
    } catch (Exception $e) {
        error_log("Erro ao gerar log: " . $e->getMessage());
        return false;
    }
}

