import express, { Router } from 'express';

import * as CustomFieldsValidation from '@/modules/customFields/customFields.validation';
import * as CustomFieldsController from '@/modules/customFields/customFields.controller';

import { validateMiddleware } from '@/shared/utils/middlewares/index';
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();

router
  .route('/')
  .get(
    userAuthAndCheckPermissions(),
    validateMiddleware(CustomFieldsValidation.getCustomFields),
    CustomFieldsController.getCustomFields,
  )
  .post(
    userAuthAndCheckPermissions(),
    // validateMiddleware(CustomFieldsValidation.createCustomFields()), // If required we can utilise this
    setAuditFields({ mode: AuditMode.CREATE, companyField: 'companyId' }),
    CustomFieldsController.createCustomFields,
  );

router
  .route('/:id')
  .get(
    userAuthAndCheckPermissions(),
    validateMiddleware(CustomFieldsValidation.getCustomFieldsById),
    CustomFieldsController.getCustomFieldsById,
  )
  .patch(
    userAuthAndCheckPermissions(),
    // validateMiddleware(CustomFieldsValidation.updateCustomFields()), // If required we can utilise this
    setAuditFields({ mode: AuditMode.UPDATE }),
    CustomFieldsController.updateCustomFields,
  )
  .delete(
    userAuthAndCheckPermissions(),
    validateMiddleware(CustomFieldsValidation.deleteCustomFieldsById),
    CustomFieldsController.deleteCustomFieldsById,
  );

router
  .route('/form/:formName')
  .patch(
    userAuthAndCheckPermissions(),
    validateMiddleware(CustomFieldsValidation.updateCustomFieldsSequence),
    setAuditFields({ mode: AuditMode.UPDATE, companyField: 'companyId' }),
    CustomFieldsController.updateCustomFieldsSequence,
  );

export default router;
