document.addEventListener('DOMContentLoaded', function() { // Variables de estado let parkingSlots = []; let totalSlots = 20; let availableSlots = 20; // Elementos del DOM const parkingSlotsInput = document.getElementById('parking-slots'); const updateLayoutBtn = document.getElementById('update-layout'); const monthlyFixedBtn = document.getElementById('monthly-fixed-btn'); const monthlyRotatingBtn = document.getElementById('monthly-rotating-btn'); const hourlyBtn = document.getElementById('hourly-btn'); const exitPlateInput = document.getElementById('exit-plate'); const processExitBtn = document.getElementById('process-exit'); const modal = document.getElementById('modal'); const modalTitle = document.getElementById('modal-title'); const modalContent = document.getElementById('modal-content'); const modalCancel = document.getElementById('modal-cancel'); const modalConfirm = document.getElementById('modal-confirm'); const availableSlotsSpan = document.getElementById('available-slots'); const totalSlotsSpan = document.getElementById('total-slots'); const parkingGrid = document.querySelector('parking-grid'); // Inicializar la cuadrícula de estacionamiento function initializeParking() { totalSlots = parseInt(parkingSlotsInput.value); availableSlots = totalSlots; parkingSlots = Array(totalSlots).fill(null); updateCounters(); parkingGrid.setAttribute('slots', totalSlots); } // Actualizar contadores function updateCounters() { availableSlotsSpan.textContent = availableSlots; totalSlotsSpan.textContent = totalSlots; } // Mostrar modal function showModal(title, content, confirmCallback) { modalTitle.textContent = title; modalContent.innerHTML = content; modal.classList.remove('hidden'); modal.classList.add('flex'); // Configurar el botón de confirmación modalConfirm.onclick = function() { if (confirmCallback) confirmCallback(); hideModal(); }; } // Ocultar modal function hideModal() { modal.classList.add('hidden'); modal.classList.remove('flex'); } // Procesar ingreso de vehículo function processVehicleEntry(type) { if (availableSlots <= 0) { showModal('Estacionamiento lleno', '
No hay plazas disponibles en este momento.
'); return; } let title, content; switch(type) { case 'monthly-fixed': title = 'Ingreso mensual fijo'; content = `${message}
`); }); } // Generar número de ticket function generateTicketNumber() { return 'T-' + Date.now().toString().slice(-6); } // Procesar salida de vehículo function processExit() { const plateNumber = exitPlateInput.value.trim(); if (!plateNumber) { alert('Por favor ingrese el número de placa'); return; } const slotIndex = parkingSlots.findIndex(slot => slot && slot.plateNumber === plateNumber); if (slotIndex === -1) { showModal('Vehículo no encontrado', 'No se encontró un vehículo con esa placa en el estacionamiento.
'); return; } const vehicle = parkingSlots[slotIndex]; let content = `Tipo: ${getVehicleTypeName(vehicle.type)}
Placa: ${vehicle.plateNumber}
Plaza: ${slotIndex + 1}
Hora de entrada: ${vehicle.entryTime.toLocaleTimeString()}
`; if (vehicle.type === 'hourly') { const exitTime = new Date(); const duration = Math.ceil((exitTime - vehicle.entryTime) / (1000 * 60 * 60)); // Horas const rate = 5; // $5 por hora const total = duration * rate; content += `Tiempo estacionado: ~${duration} hora(s)
Tarifa: $${rate} por hora
Total a pagar: $${total}
La salida del vehículo ha sido registrada exitosamente.
'); }); } // Obtener nombre del tipo de vehículo function getVehicleTypeName(type) { switch(type) { case 'monthly-fixed': return 'Mensual con plaza fija'; case 'monthly-rotating': return 'Mensual rotativo'; case 'hourly': return 'Por hora'; default: return type; } } // Event listeners updateLayoutBtn.addEventListener('click', initializeParking); monthlyFixedBtn.addEventListener('click', () => processVehicleEntry('monthly-fixed')); monthlyRotatingBtn.addEventListener('click', () => processVehicleEntry('monthly-rotating')); hourlyBtn.addEventListener('click', () => processVehicleEntry('hourly')); processExitBtn.addEventListener('click', processExit); modalCancel.addEventListener('click', hideModal); // Permitir procesar salida con Enter exitPlateInput.addEventListener('keypress', function(e) { if (e.key === 'Enter') { processExit(); } }); // Inicializar la aplicación initializeParking(); });