import express, { Router } from 'express';

import * as myoperatorValidation from './myoperator.validation';
import * as myoperatorController from './myoperator.controller';

import { validateMiddleware } from '@/shared/utils/middlewares/index';
import userAuthAndCheckPermissions from '@/modules/auth/auth.user.middleware';
import { MODULE_LIST } from '@/shared/constants/module.constant';
import { ACTIONS } from '@/shared/constants';

const router: Router = express.Router();

// Credentials management
router
  .route('/credentials')
  .get(
    userAuthAndCheckPermissions(ACTIONS.READ),
    validateMiddleware(myoperatorValidation.getCredentials),
    myoperatorController.getCredentials,
  )
  .post(
    userAuthAndCheckPermissions(ACTIONS.CREATE),
    validateMiddleware(myoperatorValidation.saveCredentials),
    myoperatorController.saveCredentials,
  )
  .delete(
    userAuthAndCheckPermissions(ACTIONS.DELETE),
    myoperatorController.deactivateIntegration,
  );

router
  .route('/credentials/test')
  .post(
    userAuthAndCheckPermissions(ACTIONS.READ),
    myoperatorController.testConnection,
  );

// User sync
router
  .route('/users/sync')
  .post(
    userAuthAndCheckPermissions(ACTIONS.CREATE),
    validateMiddleware(myoperatorValidation.syncUser),
    myoperatorController.syncUser,
  );

// User management
router
  .route('/users')
  .get(
    userAuthAndCheckPermissions(ACTIONS.READ),
    validateMiddleware(myoperatorValidation.listUsers),
    myoperatorController.listUsers,
  );

router
  .route('/users/:userId')
  .put(
    userAuthAndCheckPermissions(ACTIONS.UPDATE),
    validateMiddleware(myoperatorValidation.updateUser),
    myoperatorController.updateUser,
  )
  .delete(
    userAuthAndCheckPermissions(ACTIONS.DELETE),
    validateMiddleware(myoperatorValidation.deleteUser),
    myoperatorController.deleteUser,
  );

// Call logs
router
  .route('/call/logs')
  .get(
    userAuthAndCheckPermissions(ACTIONS.READ),
    validateMiddleware(myoperatorValidation.searchCallLogs),
    myoperatorController.searchCallLogs,
  );

router
  .route('/call/filters')
  .get(
    userAuthAndCheckPermissions(ACTIONS.READ),
    validateMiddleware(myoperatorValidation.getLogFilters),
    myoperatorController.getLogFilters,
  );

router
  .route('/call/recording/:filename')
  .get(
    userAuthAndCheckPermissions(ACTIONS.READ),
    validateMiddleware(myoperatorValidation.getRecording),
    myoperatorController.getRecordingLink,
  );

router
  .route('/call/initiate')
  .post(
    userAuthAndCheckPermissions(ACTIONS.CREATE),
    validateMiddleware(myoperatorValidation.initiateClickToCall),
    myoperatorController.initiateClickToCall,
  );

router
  .route('/call/status')
  .get(
    userAuthAndCheckPermissions(ACTIONS.READ),
    validateMiddleware(myoperatorValidation.getCallStatus),
    myoperatorController.getCallStatus,
  );

router
  .route('/request')
  .post(
    userAuthAndCheckPermissions(),
    validateMiddleware(myoperatorValidation.submitFeatureRequest),
    myoperatorController.submitFeatureRequest,
  );

export default router;
