import { Router } from 'express';
import { AppContainer } from '../container';
import { employeeAuth } from '../middleware/employeeAuth';
import { asyncHandler } from './http';

export function registerBackdatedLeaveRoutes(router: Router, c: AppContainer): void {
  router.post(
    '/leaves/backdated',
    employeeAuth,
    asyncHandler(async (req, res) => {
      res.status(201).json(await c.backdatedLeaveFacade.submit(req.employeeId!, req.body));
    }),
  );

  router.get(
    '/leaves/backdated/:id',
    employeeAuth,
    asyncHandler(async (req, res) => {
      res.json(await c.leaveFacade.getLeave(req.params.id, req.employeeId!));
    }),
  );

  router.post(
    '/leaves/backdated/:id/approve',
    employeeAuth,
    asyncHandler(async (req, res) => {
      res.json(
        await c.backdatedLeaveFacade.approve(req.employeeId!, req.params.id, req.body.approvalReason),
      );
    }),
  );

  router.post(
    '/leaves/backdated/:id/reject',
    employeeAuth,
    asyncHandler(async (req, res) => {
      res.json(await c.backdatedLeaveFacade.reject(req.employeeId!, req.params.id, req.body.reason));
    }),
  );

  router.post(
    '/leaves/backdated/:id/mark',
    employeeAuth,
    asyncHandler(async (req, res) => {
      res.json(await c.backdatedLeaveFacade.mark(req.employeeId!, req.params.id));
    }),
  );
}
