import express, { Router } from 'express';

import * as teamValidation from '@/modules/teams/teams.validation';
import * as teamController from '@/modules/teams/teams.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';
import { MODULE_LIST } from '@/shared/constants/module.constant';
import { ACTIONS } from '@/shared/constants';

const router: Router = express.Router();

router
  .route('/')
  .get(
    userAuthAndCheckPermissions(
      // MODULE_LIST.TEAM,
      // ACTIONS.READ,
    ),
    validateMiddleware(teamValidation.getTeam),
    teamController.getTeams,
  )
  .post(
    userAuthAndCheckPermissions(
      MODULE_LIST.TEAM,
      ACTIONS.CREATE,
    ),
    validateMiddleware(teamValidation.createTeam()),
    setAuditFields({ mode: AuditMode.CREATE }),
    teamController.createTeam,
  );

router
  .route('/:id')
  .get(
    userAuthAndCheckPermissions(
      MODULE_LIST.TEAM,
      ACTIONS.READ,
    ),
    validateMiddleware(teamValidation.getTeamById),
    teamController.getTeamById,
  )
  .patch(
    userAuthAndCheckPermissions(
      MODULE_LIST.TEAM,
      ACTIONS.UPDATE,
    ),
    validateMiddleware(teamValidation.updateTeam()),
    setAuditFields({ mode: AuditMode.UPDATE }),
    teamController.updateTeam,
  )
  .delete(
    userAuthAndCheckPermissions(
      MODULE_LIST.TEAM,
      ACTIONS.DELETE,
    ),
    validateMiddleware(teamValidation.deleteTeamById),
    teamController.deleteTeamById,
  );

export default router;
