<?php
require '../../conexao/conexao.php';
//require '../sessao.php';
require '../../configuacoes.php';
require '../../conexao/acesso.php';
//require '../conexao/logs.php';

// Registrar log de consulta
if (isset($_SESSION['CodUsuario']) && isset($_SESSION['NomeUsuario'])) {
	// registrarLogConsulta('Módulo', $_SESSION['CodUsuario'], $_SESSION['NomeUsuario']);
}

// Declarando null para o resultado da consulta
$resultmeta = null;

// Verificando se o usuário clicou no botão Pesquisar
if (isset($_GET['form_submitted']) && $_GET['form_submitted'] == '1') {

	$_SESSION['filtros'] = $_GET;
	if (isset($_SESSION['filtros'])) {
		$filtros_recuperados = $_SESSION['filtros'];
		$select_nome_modulo = $filtros_recuperados['nome_modulo'] ?? null;
		$select_caminho = $filtros_recuperados['caminho'] ?? null;
	}

	// Obtendo os parâmetros
	$select_nome_modulo = $_GET['nome_modulo'] ?? null;
	$select_caminho = $_GET['caminho'] ?? null;

	// SQL BASE
	$sql_base = "
	SELECT m.id_modulo as id, m.modulo as nome, m.caminho, m.descricao,p.nome_pacote
	FROM modulo m
	LEFT JOIN pacote p on p.id = m.id_pacote
	WHERE 1=1
	";

	// Filtros
	$params = [];
	$types = "";

	if (!empty($select_nome_modulo)) {
		$sql_base .= " AND m.modulo LIKE ?";
		$params[] = '%' . $select_nome_modulo . '%';
		$types .= "s";
	}

	if (!empty($select_caminho)) {
		$sql_base .= " AND m.caminho LIKE ?";
		$params[] = '%' . $select_caminho . '%';
		$types .= "s";
	}

	// Consulta final SEM paginação
	$sql_final = $sql_base . " ORDER BY m.modulo";

	if (!empty($params)) {
		$stmt = mysqli_prepare($connectionmysql, $sql_final);
		mysqli_stmt_bind_param($stmt, $types, ...$params);
		mysqli_stmt_execute($stmt);
		$resultmeta = mysqli_stmt_get_result($stmt);
	} else {
		$resultmeta = mysqli_query($connectionmysql, $sql_final);
	}
}

//print_r($_SESSION);
?>


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

<head>
	<link rel="stylesheet" href="modalexcluir.css">
	<link rel="stylesheet" href="../../../assets/css/action-menu.css">
	<script src="../../../assets/js/action-menu.js"></script>
	<?php include_once '../../geral/action-menu-helper.php'; ?>
	<style>
		.sortable {
			user-select: none;
		}

		.sort-icon {
			margin-left: 5px;
			opacity: 0.5;
		}

		.sortable:hover .sort-icon {
			opacity: 1;
		}

		.table-hover tbody tr:hover {
			background-color: rgba(0, 123, 255, 0.1);
		}

		.card {
			box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
			border: none;
		}

		.card-body {
			padding: 1.5rem;
		}

		.font-weight-bold {
			font-weight: 600 !important;
		}

		.text-muted {
			color: #6c757d !important;
		}

		/* Estilos para paginação conforme imagem */
		.pagination {
			margin-bottom: 0;
		}

		.pagination .page-link {
			border: 1px solid #dee2e6;
			color: #6c757d !important;
			padding: 6px 12px;
			margin: 0 1px;
			border-radius: 4px;
			transition: all 0.2s ease;
			background-color: #fff;
		}

		.pagination .page-link:hover {
			background-color: #e9ecef;
			border-color: #adb5bd;
			color: #6c757d !important;
		}

		.pagination .page-item.active .page-link {
			background-color: #007bff;
			border-color: #007bff;
			color: white !important;
		}

		.pagination .page-item.disabled .page-link {
			color: #6c757d !important;
			background-color: #fff;
			border-color: #dee2e6;
			cursor: not-allowed;
		}

		/* Estilo para o seletor de registros por página */
		.form-label {
			color: #6c757d !important;
		}

		.form-control-sm {
			color: #6c757d !important;
		}

		.form-control-sm {
			border-radius: 4px;
			border: 1px solid #ced4da;
			font-size: 0.875rem;
		}

		.form-control-sm:focus {
			border-color: #007bff;
			box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
		}

		.btn-outline-secondary {
			background-color: #6c757d;
			border-color: #6c757d;
			color: #fff;
		}

		.btn-outline-secondary:hover {
			background-color: #5a6268;
			border-color: #545b62;
			color: #fff;
		}
	</style>
</head>
<?php
$pageTitle = "Gestão de Módulos";
include('../header.php');
?>

<body>

	<!-- Navigation Bar-->
	<?php include('../menu.php'); ?>
	<!-- End Navigation Bar-->

	<!-- ============================================================== -->
	<!-- Start Page Content here -->
	<!-- ============================================================== -->

	<div class="wrapper">
		<div class="container-fluid">
			<div class="card-box mt-3">
				<div class="row">
					<div class="col-6 text-left">
						<h4 class="page-title"><?php echo $pageTitle ?></h4>
					</div>

					<div class="col-6 text-right">
						<a href="alteracao_geral.php?" class="btn btn-light" alt="Alterar Módulos" title="Alterar Módulos"><i class="mdi mdi-plus"></i>Gestão Módulos</a>
						<a href="inclusao_alteracao.php?id=0" class="btn btn-light" alt="Incluir Cadastro" title="Incluir Cadastro"><i class="mdi mdi-plus"></i> Adicionar</a>
						<!-- <a href="../index.php" class="btn btn-light"><i class="mdi mdi-keyboard-backspace"></i> Voltar</a> -->
					</div>

					<div class="col-12">
						<hr>
					</div>

					<!-- Seção de Filtros -->
					<div class="col-12 mb-0">
						<div class="card">
							<div class="card-body py-3 pb-2">
								<form method="get" action="">
									<div class="form-row align-items-end mb-2">
										<div class="form-group col-md-4">
											<label for="nome_modulo" class="col-form-label font-weight-bold">
												Nome do Módulo
											</label>
											<input type="text" class="form-control" id="nome_modulo" name="nome_modulo"
												placeholder="Digite o nome do módulo..."
												value="<?php echo htmlspecialchars($select_nome_modulo ?? ''); ?>">
										</div>
										<div class="form-group col-md-4">
											<label for="caminho" class="col-form-label font-weight-bold">
												Caminho
											</label>
											<input type="text" class="form-control" id="caminho" name="caminho"
												placeholder="Digite o caminho..."
												value="<?php echo htmlspecialchars($select_caminho ?? ''); ?>">
										</div>

										<div class="form-group col-md-4 d-flex justify-content-end align-items-end">
											<button type="button" class="btn btn-warning mr-2" onclick="limparFormulario()">
												<i class="mdi mdi-refresh"></i> Limpar
											</button>
											<button type="submit" class="btn btn-primary">
												<i class="mdi mdi-magnify"></i> Pesquisar
											</button>
										</div>
									</div>

									<input type="hidden" name="form_submitted" value="1" />
								</form>
							</div>
						</div>
					</div>
				</div>

				<!-- Seção de Resultados -->
				<?php if (isset($_GET['form_submitted']) && $_GET['form_submitted'] == '1'): ?>
					<div class="col-12 mt-0">
						<div class="card-body pt-0" style="margin-top: -50px;">
							<?php if ($resultmeta && mysqli_num_rows($resultmeta) > 0): ?>
								<!-- Título e Pesquisa na mesma linha -->
								<h5 class="card-title mb-1">
									Lista de Módulos
								</h5>
								<!-- <div class="row mb-0 align-items-center">
									<div class="col-md-6">
										<div class="btn-group" role="group">
											<button type="button" class="btn btn-success btn-sm" onclick="exportarCSV()">
												CSV
											</button>
											<button type="button" class="btn btn-success btn-sm" onclick="imprimirListaModulos()">
												Imprimir
											</button>
										</div>
									</div>
									<div class="col-md-6 d-flex justify-content-end">
										<div class="input-group input-group-sm" style="width: 250px;">
											<div class="input-group-prepend">
												<span class="input-group-text">
													<i class="mdi mdi-magnify"></i>
												</span>
											</div>
											<input type="text" class="form-control" id="pesquisaTabela" placeholder="Pesquisar">
										</div>
									</div>
								</div> -->

								<div class="table-responsive mt-2">
									<table id="minhatabela" class="table table-striped table-hover table-bordered" id="tabelaModulos">
										<thead class="thead-light">
											<tr>
												<!-- <th class="sortable" data-sort="pacote" onclick="sortTableColumn(0)" style="cursor: pointer;">
													Nome do Pacote
												</th> -->
												<th class="sortable" data-sort="modulo" onclick="sortTableColumn(0)" style="cursor: pointer;">
													Nome do Módulo
												</th>
												<th class="sortable" data-sort="caminho" onclick="sortTableColumn(1)" style="cursor: pointer;">
													Caminho
												</th>
												<th class="sortable" data-sort="descricao" onclick="sortTableColumn(2)" style="cursor: pointer;">
													Descrição
												</th>
												<th class="text-center">
													Ações
												</th>
											</tr>
										</thead>
										<tbody>
											<?php while ($row = mysqli_fetch_assoc($resultmeta)): ?>
												<tr>
													<!-- <td data-sort-value="<?php echo htmlspecialchars(strtolower($row['nome_pacote'])); ?>">
														<strong><?php echo htmlspecialchars($row['nome_pacote']); ?></strong>
													</td> -->
													<td data-sort-value="<?php echo htmlspecialchars(strtolower($row['nome'])); ?>">
														<strong><?php echo htmlspecialchars($row['nome']); ?></strong>
													</td>
													<td data-sort-value="<?php echo htmlspecialchars(strtolower($row['caminho'])); ?>">
														<?php echo htmlspecialchars($row['caminho']); ?>
													</td>
													<td data-sort-value="<?php echo htmlspecialchars(strtolower($row['descricao'] ?? '')); ?>">
														<?php echo $row['descricao'] ? htmlspecialchars($row['descricao']) : '<span class="text-muted">Não informado</span>'; ?>
													</td>
													<td class="text-center">
														<?php
														// Criar menu de ações para este módulo
														$actions = ActionMenuHelper::createModuloMenu($row['id']);
														echo ActionMenuHelper::renderMenu(
															'menu-modulo-' . $row['id'],
															$actions
														);
														?>
													</td>
												</tr>
											<?php endwhile; ?>
										</tbody>
									</table>
								</div>

								<!-- Paginação conforme imagem -->
								<!-- <div class="row align-items-center" style="margin-top: -15px;">
									<div class="col-md-4">
										<div class="d-flex align-items-center">
											<span class="text-muted" style="color: #6c757d !important; font-weight: bold;">Resultados por página:</span>
											<select class="form-control form-control-sm" id="per_page" style="width: 55px;" onchange="changePerPage()">
												<option value="5" <?php echo $records_per_page == 5 ? 'selected' : ''; ?>>5</option>
												<option value="10" <?php echo $records_per_page == 10 ? 'selected' : ''; ?>>10</option>
												<option value="25" <?php echo $records_per_page == 25 ? 'selected' : ''; ?>>25</option>
												<option value="50" <?php echo $records_per_page == 50 ? 'selected' : ''; ?>>50</option>
												<option value="100" <?php echo $records_per_page == 100 ? 'selected' : ''; ?>>100</option>
											</select>
										</div>
									</div>
									 <div class="col-md-4">
										<div class="text-center">
											<span class="text-muted" style="color: #6c757d !important; font-weight: bold;">
												Mostrando de <?php echo min($start_from + 1, $total_records); ?> até <?php echo min($start_from + $records_per_page, $total_records); ?> de <?php echo $total_records; ?> registros
											</span>
										</div>
									</div> 
									 <div class="col-md-4">
										<nav aria-label="Navegação de páginas">
											<ul class="pagination justify-content-end mb-0">
												 Página anterior
												<?php if ($current_page > 1): ?>
													<li class="page-item">
														<a class="page-link" href="<?php echo buildPaginationUrl($current_page - 1); ?>" style="font-weight: bold;">Anterior</a>
													</li>
												<?php else: ?>
													<li class="page-item disabled">
														<span class="page-link" style="font-weight: bold;">Anterior</span>
													</li>
												<?php endif; ?>

												Páginas numeradas
												<?php
												$start_page = max(1, $current_page - 2);
												$end_page = min($total_pages, $current_page + 2);

												// Mostrar primeira página se não estiver no range
												if ($start_page > 1) {
													echo '<li class="page-item"><a class="page-link" href="' . buildPaginationUrl(1) . '">1</a></li>';
													if ($start_page > 2) {
														echo '<li class="page-item disabled"><span class="page-link">...</span></li>';
													}
												}

												for ($i = $start_page; $i <= $end_page; $i++):
												?>
													<li class="page-item <?php echo $i == $current_page ? 'active' : ''; ?>">
														<a class="page-link" href="<?php echo buildPaginationUrl($i); ?>"><?php echo $i; ?></a>
													</li>
												<?php endfor; ?>

												<?php
												// Mostrar última página se não estiver no range
												if ($end_page < $total_pages) {
													if ($end_page < $total_pages - 1) {
														echo '<li class="page-item disabled"><span class="page-link">...</span></li>';
													}
													echo '<li class="page-item"><a class="page-link" href="' . buildPaginationUrl($total_pages) . '">' . $total_pages . '</a></li>';
												}
												?>

												 Próxima página
												<?php if ($current_page < $total_pages): ?>
													<li class="page-item">
														<a class="page-link" href="<?php echo buildPaginationUrl($current_page + 1); ?>" style="font-weight: bold;">Próximo</a>
													</li>
												<?php else: ?>
													<li class="page-item disabled">
														<span class="page-link" style="font-weight: bold;">Próximo</span>
													</li>
												<?php endif; ?>
											</ul>
										</nav>
									</div> 
								</div> -->

							<?php else: ?>
								<!-- Mensagem quando não há resultados -->
								<div class="text-center py-5">
									<i class="mdi mdi-information-outline text-muted" style="font-size: 4rem;"></i>
									<h4 class="text-muted mt-3">Nenhum módulo encontrado</h4>
									<p class="text-muted mb-4">Tente ajustar os filtros de pesquisa ou adicionar um novo módulo.</p>
									<a href="inclusao_alteracao.php?id=0" class="btn btn-primary">
										<i class="mdi mdi-plus"></i> Adicionar Módulo
									</a>
								</div>
							<?php endif; ?>
						</div>
					</div>
			</div>
		<?php endif; ?>
		</div>
	</div>
	</div> <!-- end container -->
	</div>


	<!-- end wrapper -->

	<!-- ============================================================== -->
	<!-- End Page content -->
	<!-- ============================================================== -->

	<!-- Modal de Confirmação de Exclusão -->
	<div class="modal fade" id="modalExclusao" tabindex="-1" role="dialog">
		<div class="modal-dialog" role="document">
			<div class="modal-content">
				<div class="modal-header">
					<h5 class="modal-title">Confirmar Exclusão</h5>
					<button type="button" class="close" data-dismiss="modal">
						<span>&times;</span>
					</button>
				</div>
				<div class="modal-body">
					<p>Tem certeza que deseja excluir o módulo "<span id="nomeModuloExclusao"></span>"?</p>
					<p class="text-danger"><strong>Esta ação não pode ser desfeita!</strong></p>
				</div>
				<div class="modal-footer">
					<button type="button" class="btn btn-secondary" data-dismiss="modal">Cancelar</button>
					<a href="#" id="btnConfirmarExclusao" class="btn btn-danger">Confirmar Exclusão</a>
				</div>
			</div>
		</div>
	</div>

	<!-- Footer Start -->
	<?php include('../footer.php'); ?>
	<!-- end Footer -->

	<?php include('../mensagens_modais.php'); ?>

	<!-- jQuery -->
	<script src="../../../assets/libs/jquery/jquery.min.js"></script>
	<!-- Bootstrap 4 -->
	<script src="../../../assets/libs/bootstrap/js/bootstrap.bundle.min.js"></script>
	<!-- Vendor js -->
	<script src="../../../assets/js/vendor.min.js"></script>

	<!-- App js-->
	<script src="../../../assets/js/app.min.js"></script>

	<script src="/kpi/assets/js/modais.js"></script>
	<script src="../../../assets/js/modal-helper.js"></script>

	<!-- Layouts -->
	<script src="../../../assets/js/layout.js"></script>

	<!-- third party js -->
	<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
	<script src="https://cdn.datatables.net/1.11.3/js/jquery.dataTables.min.js"></script>
	<script src="https://cdn.datatables.net/1.11.3/js/dataTables.bootstrap5.min.js"></script>
	<link rel="stylesheet" href="https://cdn.datatables.net/1.11.3/css/dataTables.bootstrap5.min.css">

	<script src="https://cdn.datatables.net/buttons/2.0.1/js/dataTables.buttons.min.js"></script>
	<script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.1.3/jszip.min.js"></script>
	<script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.66/pdfmake.min.js"></script>
	<script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.66/vfs_fonts.js"></script>
	<script src="https://cdn.datatables.net/buttons/2.0.1/js/buttons.html5.min.js"></script>
	<link rel="stylesheet" href="https://cdn.datatables.net/buttons/2.0.1/css/buttons.dataTables.min.css">
	<link rel="stylesheet" href="../../../assets/css/resetedatatable.css">

	<script>
		// Função para confirmar exclusão
		function confirmarExclusao(id, nome) {
			if (typeof ModalHelper === 'undefined') {
				window.location.href = 'excluir_modulo.php?id=' + id;
				return;
			}

			ModalHelper.openConfirmationModal({
				title: 'Confirmar Exclusão',
				message: `Tem certeza que deseja excluir o módulo? Esta ação não pode ser desfeita.`,
				confirmText: 'Sim, excluir',
				cancelText: 'Cancelar',
				onConfirm() {
					window.location.href = 'excluir_modulo.php?id=' + id;
				},
				onCancel() {
					ModalHelper.showToast('Exclusão cancelada', '#f97316');
				}
			});
		}

		// Função para limpar formulário
		function limparFormulario() {
			document.getElementById('nome_modulo').value = '';
			document.getElementById('caminho').value = '';
			window.location.href = 'index.php';
		}

		// Função para pesquisa na tabela
		document.getElementById('pesquisaTabela').addEventListener('keyup', function() {
			var input = this.value.toLowerCase();
			var table = document.getElementById('tabelaModulos');
			var rows = table.getElementsByTagName('tr');

			for (var i = 1; i < rows.length; i++) {
				var cells = rows[i].getElementsByTagName('td');
				var found = false;

				for (var j = 0; j < cells.length - 1; j++) { // -1 para excluir coluna de ações
					if (cells[j].textContent.toLowerCase().indexOf(input) > -1) {
						found = true;
						break;
					}
				}

				rows[i].style.display = found ? '' : 'none';
			}
		});

		// Função para ordenação da tabela
		function sortTableColumn(columnIndex) {
			var table = document.getElementById('tabelaModulos');
			var rows = Array.from(table.rows).slice(1); // Excluir cabeçalho
			var isAscending = table.getAttribute('data-sort-direction') !== 'asc';

			rows.sort(function(a, b) {
				var aValue = a.cells[columnIndex].getAttribute('data-sort-value') || a.cells[columnIndex].textContent.toLowerCase();
				var bValue = b.cells[columnIndex].getAttribute('data-sort-value') || b.cells[columnIndex].textContent.toLowerCase();

				if (isAscending) {
					return aValue > bValue ? 1 : -1;
				} else {
					return aValue < bValue ? 1 : -1;
				}
			});

			// Reordenar as linhas na tabela
			var tbody = table.getElementsByTagName('tbody')[0];
			rows.forEach(function(row) {
				tbody.appendChild(row);
			});

			// Atualizar direção da ordenação
			table.setAttribute('data-sort-direction', isAscending ? 'asc' : 'desc');

			// Atualizar ícones de ordenação
			var headers = table.getElementsByTagName('th');
			for (var i = 0; i < headers.length; i++) {
				var icon = headers[i].querySelector('.sort-icon');
				if (i === columnIndex) {
					icon.className = isAscending ? 'mdi mdi-arrow-up sort-icon' : 'mdi mdi-arrow-down sort-icon';
				} else {
					icon.className = 'mdi mdi-arrow-up-down sort-icon';
				}
			}
		}

		// Função para mudar registros por página
		function changePerPage() {
			var perPage = document.getElementById('per_page').value;
			var urlParams = new URLSearchParams(window.location.search);
			urlParams.set('per_page', perPage);
			urlParams.set('page', 1); // Voltar para primeira página
			window.location.href = '?' + urlParams.toString();
		}

		// Função para exportar para CSV
		function exportarCSV() {
			var table = document.getElementById('tabelaModulos');
			var csv = [];

			// Cabeçalhos (excluindo a coluna de ações)
			var headers = [];
			$(table).find('thead th').each(function(index) {
				if (index < 3) { // Apenas as 3 primeiras colunas (Nome do Módulo, Caminho, Descrição)
					headers.push($(this).text().trim());
				}
			});
			csv.push(headers.join(','));

			// Dados (excluindo a coluna de ações)
			$(table).find('tbody tr').each(function() {
				var row = [];
				$(this).find('td').each(function(index) {
					if (index < 3) { // Apenas as 3 primeiras colunas
						var text = $(this).text().trim().replace(/"/g, '""');
						row.push('"' + text + '"');
					}
				});
				csv.push(row.join(','));
			});

			// Download
			var csvContent = csv.join('\n');
			var blob = new Blob([csvContent], {
				type: 'text/csv;charset=utf-8;'
			});
			var link = document.createElement('a');
			link.href = URL.createObjectURL(blob);
			link.download = 'modulos_' + new Date().toISOString().slice(0, 10) + '.csv';
			link.click();
		}

		// Função para imprimir lista de módulos
		function imprimirListaModulos() {
			// Pegar os filtros atuais da URL
			var urlParams = new URLSearchParams(window.location.search);
			var filtros = {};

			// Adicionar todos os filtros ativos
			if (urlParams.get('nome_modulo')) filtros.nome_modulo = urlParams.get('nome_modulo');
			if (urlParams.get('caminho')) filtros.caminho = urlParams.get('caminho');

			// Criar URL para impressão
			var printUrl = 'imprimir_lista_modulos.php?' + new URLSearchParams(filtros).toString();

			// Abrir em nova aba para impressão
			window.open(printUrl, '_blank');
		}
	</script>

	<script>
		$(document).ready(function() {
			var table = $('#minhatabela').DataTable({
				"language": {
					"url": "https://cdn.datatables.net/plug-ins/1.10.21/i18n/Portuguese-Brasil.json"
				},
				"lengthMenu": [
					[10, 25, 50, 100, -1],
					[10, 25, 50, 100, "Todos"]
				],
				"buttons": [
					// 'copyHtml5',
					'excelHtml5',
					'csvHtml5',
					// 'pdfHtml5'
				],
				dom: '<"d-flex justify-content-between align-items-center mb-2"Bf>t<"datatable-footer d-flex justify-content-between align-items-center mt-2 w-100"<"footer-left"l><"footer-center"i><"footer-right"p>>',
				"order": [
					[0, 'asc']
				], // Ordenar pela primeira coluna em ordem ascendente

			});

			setTimeout(function() {
				$("#minhatabela_filter").children("label").css("font-size", "15px");
			}, 150);
			setTimeout(function() {
				$("#minhatabela_length").children("label").css("font-size", "15px");
			}, 150);
		});
	</script>
</body>

</html>