import express, { Router } from 'express';

import * as propertyFileValidation from './files.validation';
import * as propertyFileController from './files.controller';

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';

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

router
  .route('/')
  .get(
    userAuthAndCheckPermissions(),
    validateMiddleware(propertyFileValidation.getPropertyFiles),
    propertyFileController.getPropertyFiles,
  )
  .post(
    userAuthAndCheckPermissions(),
    validateMiddleware(propertyFileValidation.createPropertyFile()),
    setAuditFields({ mode: AuditMode.CREATE }),
    propertyFileController.createPropertyFile,
  );

router
  .route('/:id')
  .get(
    userAuthAndCheckPermissions(),
    validateMiddleware(propertyFileValidation.getPropertyFileById),
    propertyFileController.getPropertyFileById,
  )
  .patch(
    userAuthAndCheckPermissions(),
    validateMiddleware(propertyFileValidation.updatePropertyFile()),
    setAuditFields({ mode: AuditMode.UPDATE }),
    propertyFileController.updatePropertyFile,
  )
  .delete(
    userAuthAndCheckPermissions(),
    validateMiddleware(propertyFileValidation.deletePropertyFileById),
    propertyFileController.deletePropertyFileById,
  );

export default router;
