const { appointmentQueries, clientQueries } = require('../models/queries'); exports.bookAppointmentForm = async (req, res) => { try { const { unit_id } = req.params; const unitData = await clientQueries.getUnitById(unit_id); if (!unitData) { return res.status(404).send('Unit not found'); } const timeslots = await appointmentQueries.getAvailableTimeslots(); const agentsMap = {}; timeslots.forEach(slot => { if (!agentsMap[slot.agent_id]) { agentsMap[slot.agent_id] = { id: slot.agent_id, name: slot.agent_name, email: slot.email, timeslots: [], }; } agentsMap[slot.agent_id].timeslots.push({ id: slot.timeslot_id, date: slot.date, time_start: slot.time_start, time_end: slot.time_end, }); }); const agents = Object.values(agentsMap); res.render('client/book-appointment', { unit: unitData, agents }); } catch (error) { console.error('Error loading booking form:', error); res.status(500).send('Database error'); } }; exports.bookAppointmentSubmit = async (req, res) => { try { const { unit_id } = req.params; const { client_name, client_email, client_phone, timeslot_id } = req.body; const isAvailable = await appointmentQueries.verifyTimeslot(timeslot_id); if (!isAvailable) { return res.status(400).send('This timeslot is no longer available'); } const unitData = await clientQueries.getUnitById(unit_id); if (!unitData) { return res.status(404).send('Unit not found'); } const clientId = await appointmentQueries.createClient( client_name, client_email, client_phone ); const appointmentId = await appointmentQueries.createAppointment( clientId, unit_id, timeslot_id ); await appointmentQueries.bookTimeslot(timeslot_id); res.redirect(`/appointments/${appointmentId}/confirmation`); } catch (error) { console.error('Booking failed —', error.message); res.status(400).send('Could not complete your booking'); } }; exports.appointmentConfirmation = async (req, res) => { try { const { id } = req.params; const appointment = await appointmentQueries.getAppointmentDetails(id); if (!appointment) { return res.status(404).send('Appointment not found'); } res.render('client/appointment-confirmation', { appointment }); } catch (error) { console.error('Error fetching appointment:', error); res.status(500).send('Database error'); } };