import express, { Router } from 'express';

import * as timelineController from '@/modules/project/timeline/timeline.controller';
import * as timelineValidation from '@/modules/project/timeline/timeline.validation';
import { validateMiddleware } from '@/shared/utils/middlewares';
import userAuthAndCheckPermissions from '@/modules/auth/auth.user.middleware';
import { setAuditFields } from '@/shared/middleware/setAuditFields';
import { AuditMode } from '@/shared/constants/enum.constant';
import { MODULE_LIST } from '@/shared/constants/module.constant';
import { ACTIONS } from '@/shared/constants';

const router: Router = express.Router({ mergeParams: true });

router
  .route('/')
  .post(
    userAuthAndCheckPermissions(MODULE_LIST.PROJECT, ACTIONS.CREATE),
    validateMiddleware(timelineValidation.createTimeline),
    setAuditFields({ mode: AuditMode.CREATE }),
    timelineController.createTimeline,
  )
  .get(
    userAuthAndCheckPermissions(MODULE_LIST.PROJECT, ACTIONS.READ),
    validateMiddleware(timelineValidation.getTimelines),
    timelineController.getTimelines,
  );

router
  .route('/:id')
  .get(
    userAuthAndCheckPermissions(MODULE_LIST.PROJECT, ACTIONS.READ),
    validateMiddleware(timelineValidation.getTimelineById),
    timelineController.getTimelineById,
  )
  .patch(
    userAuthAndCheckPermissions(MODULE_LIST.PROJECT, ACTIONS.UPDATE),
    validateMiddleware(timelineValidation.updateTimeline),
    setAuditFields({ mode: AuditMode.UPDATE }),
    timelineController.updateTimeline,
  )
  .delete(
    userAuthAndCheckPermissions(MODULE_LIST.PROJECT, ACTIONS.DELETE),
    validateMiddleware(timelineValidation.deleteTimelineById),
    timelineController.deleteTimelineById,
  );

export default router;
