import { Router } from 'express';
import { PublicController } from '../controllers/PublicController';
import { validate } from '../middleware/validate.middleware';
import { createBookingSchema, cancelBookingSchema } from '../dto/booking.dto';
import { submitGuestFeedbackSchema } from '../dto/communication.dto';
import { validateQuery } from '../middleware/validate.middleware';
import { slotsQuerySchema } from '../dto/availability.dto';
import { publicSlotsRateLimit, publicBookingRateLimit } from '../middleware/rateLimit.middleware';

const router = Router();
const controller = new PublicController();

router.get('/:username', controller.getHostPage);
router.get('/:username/:eventSlug', controller.getEventPage);
router.get(
  '/:username/:eventSlug/slots',
  publicSlotsRateLimit,
  validateQuery(slotsQuerySchema),
  controller.getSlots,
);
router.post(
  '/:username/:eventSlug/bookings',
  publicBookingRateLimit,
  validate(createBookingSchema),
  controller.createBooking,
);
router.post('/cancel', validate(cancelBookingSchema), controller.cancelBooking);
router.post('/feedback', validate(submitGuestFeedbackSchema), controller.submitFeedback);

export default router;
