import express, { Router } from 'express';

import validate from '@/shared/utils/middlewares/validate.middleware';
import * as authValidation from '@/modules/auth/auth.validation';
import * as authController from '@/modules/auth/auth.controller';
import userAuthAndCheckPermissions from './auth.user.middleware';

const router: Router = express.Router();

router.post(
  '/register',
  validate(authValidation.register()),
  authController.register,
);
router.post('/login', validate(authValidation.login), authController.login);
router.post('/logout',  userAuthAndCheckPermissions(), validate(authValidation.logout), authController.logout);
router.post(
  '/refresh-tokens',
  validate(authValidation.refreshTokens),
  authController.refreshTokens,
);
router.post(
  '/forgot-password',
  validate(authValidation.forgotPassword),
  authController.forgotPassword,
);
router.post(
  '/reset-password',
  validate(authValidation.resetPassword),
  authController.resetPassword,
);

router.post(
  '/verify-email',
  validate(authValidation.verifyEmail),
  authController.verifyEmail,
);

router.post(
  '/resend-password-email/:userId',
  userAuthAndCheckPermissions(),
  authController.sendPasswordEmail,
);

// App Auth Form

router.post(
  '/user/generate-otp',
  validate(authValidation.generateOtp),
  authController.generateOtp,
);

router.post(
  '/user/resend-otp',
  validate(authValidation.resendOtp),
  authController.resendOtp,
);

router.post(
  '/user/verify-otp',
  validate(authValidation.verifyOtp),
  authController.verifyOtp,
);

export default router;
