import { Router } from 'express';
import { AuthController } from '../controllers/AuthController';
import { validate } from '../middleware/validate.middleware';
import { requireAuth } from '../middleware/auth.middleware';
import {
  registerSchema,
  loginSchema,
  forgotPasswordSchema,
  resetPasswordSchema,
  changePasswordSchema,
} from '../dto/auth.dto';
import { authRateLimit } from '../middleware/rateLimit.middleware';

const router = Router();
const controller = new AuthController();

router.post('/register', authRateLimit, validate(registerSchema), controller.register);
router.post('/login', authRateLimit, validate(loginSchema), controller.login);
router.post(
  '/forgot-password',
  authRateLimit,
  validate(forgotPasswordSchema),
  controller.forgotPassword,
);
router.post('/reset-password', authRateLimit, validate(resetPasswordSchema), controller.resetPassword);
router.post(
  '/change-password',
  requireAuth,
  authRateLimit,
  validate(changePasswordSchema),
  controller.changePassword,
);

router.get('/oauth/:provider', authRateLimit, controller.oauthStart);
router.get('/oauth/callback/:provider', controller.oauthCallback);

export default router;
