import express, { Router } from 'express';

import * as notificationController from './notification.controller';
import * as notificationValidation from './notification.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';
import { MODULE_LIST } from '@/shared/constants/module.constant';
import { ACTIONS } from '@/shared/constants';

const router: Router = express.Router();

router
  .route('/')
  .get(
    userAuthAndCheckPermissions(MODULE_LIST.NOTIFICATION, ACTIONS.READ),
    validate(notificationValidation.getNotifications),
    notificationController.getNotifications,
  )
  .post(
    userAuthAndCheckPermissions(),
    validate(notificationValidation.createNotification()),
    setAuditFields({ mode: AuditMode.CREATE }),
    notificationController.createNotification,
  );

router
  .route('/:id')
  .get(
    userAuthAndCheckPermissions(),
    validate(notificationValidation.getNotificationById),
    notificationController.getNotificationById,
  )
  .patch(
    userAuthAndCheckPermissions(),
    validate(notificationValidation.updateNotification()),
    setAuditFields({ mode: AuditMode.UPDATE }),
    notificationController.updateNotification,
  )
  .delete(
    userAuthAndCheckPermissions(),
    validate(notificationValidation.deleteNotificationById),
    notificationController.deleteNotification,
  );

export default router;
