import express, { Router } from 'express';
import * as unitBookingOrHoldController from './unitBookingOrHold.controller';
import * as unitBookingOrHoldValidation from './unitBookingOrHold.validation';

import userAuthAndCheckPermissions from '@/modules/auth/auth.user.middleware';
import { AuditMode } from '@/shared/constants/enum.constant';
import { setAuditFields } from '@/shared/middleware/setAuditFields';
import validate from '@/shared/utils/middlewares/validate.middleware';

const router: Router = express.Router();

router.patch(
  '/:id/booking-document',
  userAuthAndCheckPermissions(),
  validate(unitBookingOrHoldValidation.updateBookingDocument),
  setAuditFields({ mode: AuditMode.UPDATE, companyField: 'company' }),
  unitBookingOrHoldController.updateBookingDocument,
);

router
  .route('/')
  .get(
    userAuthAndCheckPermissions(),
    validate(unitBookingOrHoldValidation.getUnitBookingOrHolds),
    unitBookingOrHoldController.getUnitBookingOrHolds,
  )
  .post(
    userAuthAndCheckPermissions(),
    validate((req) => unitBookingOrHoldValidation.createUnitBookingOrHold(req.user)),
    setAuditFields({ mode: AuditMode.CREATE, companyField: 'company' }),
    unitBookingOrHoldController.createUnitBookingOrHold,
  );

router
  .route('/:id')
  .get(
    userAuthAndCheckPermissions(),
    validate(unitBookingOrHoldValidation.getUnitBookingOrHoldById),
    unitBookingOrHoldController.getUnitBookingOrHoldById,
  )
  .patch(
    userAuthAndCheckPermissions(),
    validate(unitBookingOrHoldValidation.updateUnitBookingOrHold()),
    setAuditFields({ mode: AuditMode.UPDATE, companyField: 'company' }),
    unitBookingOrHoldController.updateUnitBookingOrHold,
  )
  .delete(
    userAuthAndCheckPermissions(),
    validate(unitBookingOrHoldValidation.deleteUnitBookingOrHoldById),
    unitBookingOrHoldController.deleteUnitBookingOrHoldById,
  );

export default router;
