<?php
header("Cache-Control: no-cache, no-store, must-revalidate");
header("Pragma: no-cache");
header("Expires: 0");

require_once 'config.php';
session_start();

if (!isset($_SESSION['user_id'])) {
    header("Location: index.php");
    exit;
}

$user_id = $_SESSION['user_id'];
$username = $_SESSION['username'];
$painel = isset($_GET['painel']) ? $_GET['painel'] : 'pessoal';

function getPermissoes($conn, $user_id) {
    $query = "SELECT p.NomePermissao FROM Utilizadores_Permissoes up INNER JOIN Permissoes p ON up.PermissaoID = p.PermissaoID WHERE up.UserID = ?";
    $stmt = $conn->prepare($query);
    $stmt->bind_param("i", $user_id);
    $stmt->execute();
    $result = $stmt->get_result();
    $permissoes = [];
    while ($row = $result->fetch_assoc()) {
        $permissoes[] = $row['NomePermissao'];
    }
    return $permissoes;
}

$permissoes = getPermissoes($conn, $user_id);

function carregarOcorrencias($conn, $estadoIDs = [], $userID = 0, $somenteCriados = false) {
    $whereClause = "1=1";
    $params = [];
    $paramTypes = "";

    if ($userID !== 0) {
        if ($somenteCriados) {
            $whereClause .= " AND Ocorrencias.PedidoPor = ?";
            $params[] = $userID;
            $paramTypes .= "i";
        } else {
            $whereClause .= " AND (Ocorrencias.PedidoPor = ? OR Ocorrencias.AtribuidoA = ?)";
            $params[] = $userID;
            $params[] = $userID;
            $paramTypes .= "ii";
        }
    }

    if (!empty($estadoIDs)) {
        $placeholders = implode(",", array_fill(0, count($estadoIDs), "?"));
        $whereClause .= " AND Ocorrencias.Estado IN ($placeholders)";
        $params = array_merge($params, $estadoIDs);
        $paramTypes .= str_repeat("i", count($estadoIDs));
    }

    $query = "SELECT 
                Ocorrencias.OcorrenciaID AS ID,  
                EstadoOcorrencia.NomeEstado AS Estado,
                EstadoOcorrencia.EstadoID AS StatusID,
                Locais.NomeLocal AS Local, 
                Ocorrencias.Imobilizado AS Imobilizado, 
                Ocorrencias.Equipamento AS Equipamento, 
                Ocorrencias.Descricao AS Descricao,
                DATE_FORMAT(Ocorrencias.DataPedido, '%d-%m-%Y %H:%i') AS Data,
                Utilizadores.Nome AS Utilizador 
              FROM Ocorrencias
              INNER JOIN EstadoOcorrencia ON Ocorrencias.Estado = EstadoOcorrencia.EstadoID
              INNER JOIN Locais ON Ocorrencias.LocalID = Locais.LocalID
              INNER JOIN Utilizadores ON Ocorrencias.PedidoPor = Utilizadores.UserID
              WHERE $whereClause
              ORDER BY 
                  CASE WHEN EstadoOcorrencia.EstadoID IN (0, 6) THEN 1 ELSE 0 END, 
                  Ocorrencias.DataPedido DESC";

    $stmt = $conn->prepare($query);
    if ($paramTypes) {
        $stmt->bind_param($paramTypes, ...$params);
    }
    $stmt->execute();
    return $stmt->get_result()->fetch_all(MYSQLI_ASSOC);
}

try {
    switch ($painel) {
        case 'pessoal':
            $dados = carregarOcorrencias($conn, [], $user_id, true);
            break;
        case 'secretaria':
            $dados = carregarOcorrencias($conn, [1]);
            break;
        case 'direcao':
            $dados = carregarOcorrencias($conn, [2]);
            break;
        case 'informatica':
            $dados = carregarOcorrencias($conn, [0, 1, 2, 3, 4, 5, 6]);
            break;
        case 'responsavel':
            $dados = carregarOcorrencias($conn, [3, 4, 5], $user_id);
            break;
        default:
            $dados = carregarOcorrencias($conn, [], $user_id);
            break;
    }
} catch (Exception $e) {
    die("Erro ao carregar dados: " . $e->getMessage());
}
?>

<!DOCTYPE html>
<html lang="pt">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Painel SIGMA</title>
    <link rel="stylesheet" href="css/painel.css?v=<?= time(); ?>">
    <script src="js/script.js?v=<?= time(); ?>"></script>
    <link rel="icon" href="SIGMA_LOGO.ico" type="image/x-icon">
    <script>
        function cancelarPedido() {
            const pedidoSelecionado = document.getElementById('pedido-selecionado').value;
            if (!pedidoSelecionado) {
                alert('Por favor, selecione um pedido para cancelar.');
                return;
            }
            if (confirm('Tem certeza que deseja cancelar o pedido nº ' + pedidoSelecionado + '?')) {
                const motivo = prompt('Por favor, insira o motivo do cancelamento:');
                if (motivo === null || motivo.trim() === '') {
                    alert('Operação cancelada. É necessário informar um motivo.');
                    return;
                }
                fetch('cancelar_pedido.php', {
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/json',
                    },
                    body: JSON.stringify({
                        pedidoID: pedidoSelecionado,
                        motivo: motivo
                    }),
                })
                .then(response => response.json())
                .then(data => {
                    if (data.success) {
                        alert('Pedido cancelado com sucesso.');
                        location.reload();
                    } else {
                        alert('Erro ao cancelar o pedido: ' + data.message);
                    }
                })
                .catch(error => {
                    console.error('Erro:', error);
                    alert('Erro ao processar o pedido.');
                });
            }
        }

        function toggleSelection(row, id) {
            const hiddenInput = document.getElementById('pedido-selecionado');
            const selectedRow = document.querySelector('tr.selected');
            if (selectedRow) {
                selectedRow.classList.remove('selected');
            }
            if (hiddenInput.value === id) {
                hiddenInput.value = '';
            } else {
                hiddenInput.value = id;
                row.classList.add('selected');
            }
        }
    </script>
</head>

<body>
    <header>Painel SIGMA</header>
    <nav>
        <ul>
            <li><a href="painel.php?painel=pessoal" class="<?= $painel === 'pessoal' ? 'active' : '' ?>">Painel Pessoal</a></li>
            <?php if (in_array('Secretaria', $permissoes)): ?>
                <li><a href="painel.php?painel=secretaria" class="<?= $painel === 'secretaria' ? 'active' : '' ?>">Painel Secretaria</a></li>
            <?php endif; ?>
            <?php if (in_array('Direção', $permissoes)): ?>
                <li><a href="painel.php?painel=direcao" class="<?= $painel === 'direcao' ? 'active' : '' ?>">Painel Direção</a></li>
            <?php endif; ?>
            <?php if (in_array('Responsável de Área', $permissoes)): ?>
                <li><a href="painel.php?painel=responsavel" class="<?= $painel === 'responsavel' ? 'active' : '' ?>">Painel Responsável</a></li>
            <?php endif; ?>
            <?php if (in_array('Administrador', $permissoes)): ?>
                <li><a href="painel.php?painel=informatica" class="<?= $painel === 'informatica' ? 'active' : '' ?>">Painel Informática</a></li>
            <?php endif; ?>
        </ul>
    </nav>
    <main>
        <?php
        $tituloPainel = "Central de Ocorrências - ";

        switch ($painel) {
            case 'pessoal':
                $tituloPainel .= "Pedidos Pessoais";
                break;
            case 'secretaria':
                $tituloPainel .= "Secretaria";
                break;
            case 'direcao':
                $tituloPainel .= "Direção";
                break;
            case 'informatica':
                $tituloPainel .= "Informática";
                break;
            case 'responsavel':
                $tituloPainel .= "Pedidos Atribuídos";
                break;
            default:
                $tituloPainel .= "Desconhecido";
                break;
        }
        ?>
        <h2><?= $tituloPainel ?></h2>
        <input type="hidden" id="pedido-selecionado" value="">
        <form id="form-cancelar" method="post" action="painel.php?painel=informatica">
            <input type="hidden" name="acao" value="cancelar">
            <input type="hidden" name="pedido_id" id="pedido-selecionado">
        </form>
        <div class="button-container">
            <button class="btn btn-novo" onclick="window.location.href='novopedido.php'">Novo Pedido</button>
            <button class="btn btn-pdf">Gerar PDF</button>
            <button class="btn btn-atualizar" onclick="location.reload()">Atualizar</button>
            <?php if ($painel === 'responsavel' && in_array('Responsável de Área', $permissoes)): ?>
                <button class="btn btn-analise" onclick="alert('Pedido em análise: ' + document.getElementById('pedido-selecionado').value)">Em Análise</button>
                <button class="btn btn-pecas" onclick="alert('Aguardando peças para: ' + document.getElementById('pedido-selecionado').value)">Aguarda Peças</button>
            <?php endif; ?>
            <?php if ($painel === 'informatica' && in_array('Administrador', $permissoes)): ?>
                <button type="button" class="btn btn-cancelar" onclick="cancelarPedido()">Cancelar</button>
            <?php endif; ?>
        </div>
        <table>
            <thead>
                <tr>
                    <th style="width: 1%;"></th>
                    <th style="width: 10%;">Nº Pedido</th>
                    <th style="width: 15%;">Estado</th>
                    <th style="width: 5%;">Local</th>
                    <th style="width: 10%;">Imobilizado</th>
                    <th style="width: 15%;">Equipamento</th>
                    <th style="width: 25%;">Descrição</th>
                    <th style="width: 15%;">Data</th>
                    <th style="width: 10%;">Utilizador</th>
                </tr>
            </thead>
            <tbody>
                <?php if (!empty($dados)): ?>
                    <?php foreach ($dados as $ocorrencia): ?>
                        <tr class="tr-status-<?= htmlspecialchars($ocorrencia['StatusID']) ?>" onclick="toggleSelection(this, '<?= htmlspecialchars($ocorrencia['ID']) ?>')">
                            <td>
                                <input type="radio" name="pedido" value="<?= htmlspecialchars($ocorrencia['ID']) ?>">
                            </td>
                            <td><?= htmlspecialchars($ocorrencia['ID']) ?></td>
                            <td><?= htmlspecialchars($ocorrencia['Estado']) ?></td>
                            <td><?= htmlspecialchars($ocorrencia['Local']) ?></td>
                            <td><?= htmlspecialchars($ocorrencia['Imobilizado']) ?></td>
                            <td><?= htmlspecialchars($ocorrencia['Equipamento']) ?></td>
                            <td><?= htmlspecialchars($ocorrencia['Descricao']) ?></td>
                            <td><?= htmlspecialchars($ocorrencia['Data']) ?></td>
                            <td><?= htmlspecialchars($ocorrencia['Utilizador']) ?></td>
                        </tr>
                    <?php endforeach; ?>
                <?php else: ?>
                    <tr>
                        <td colspan="9">Nenhuma ocorrência encontrada.</td>
                    </tr>
                <?php endif; ?>
            </tbody>
        </table>
    </main>
    <footer>© 2024 SIGMA - Sistema Integrado de Gestão e Monotorização de Ativos</footer>
</body>

</html>
