import * as express from 'express';
import { Request, Response } from 'express';
import { authentification } from '../../../middlewares/authentication.middleware';
import { authorization } from '../../../middlewares/authorization.middleware';
import { Roles } from '../../auth/enums/roles.enum';
import { AvailabilityController } from '../controllers/availability.controller';

const Router = express.Router();
const staffRoles = [Roles.ADMIN, Roles.RECEPTIONIST];

Router.get('/dates', (req: Request, res: Response) => { void AvailabilityController.getAvailableDates(req, res); });
Router.get('/slots', (req: Request, res: Response) => { void AvailabilityController.getAvailableSlots(req, res); });

Router.get(
  '/schedule',
  authentification,
  authorization(staffRoles),
  (req: Request, res: Response) => { void AvailabilityController.getSchedule(req, res); }
);

Router.put(
  '/schedule',
  authentification,
  authorization([Roles.ADMIN]),
  (req: Request, res: Response) => { void AvailabilityController.updateSchedule(req, res); }
);

Router.get(
  '/blocked',
  authentification,
  authorization(staffRoles),
  (req: Request, res: Response) => { void AvailabilityController.listBlocked(req, res); }
);

Router.post(
  '/blocked',
  authentification,
  authorization(staffRoles),
  (req: Request, res: Response) => { void AvailabilityController.createBlocked(req, res); }
);

Router.delete(
  '/blocked/:id',
  authentification,
  authorization(staffRoles),
  (req: Request, res: Response) => { void AvailabilityController.deleteBlocked(req, res); }
);

Router.get(
  '/fulfilled',
  authentification,
  authorization(staffRoles),
  (req: Request, res: Response) => { void AvailabilityController.listFulfilled(req, res); }
);

Router.post(
  '/fulfilled',
  authentification,
  authorization(staffRoles),
  (req: Request, res: Response) => { void AvailabilityController.createFulfilled(req, res); }
);

Router.delete(
  '/fulfilled/:id',
  authentification,
  authorization(staffRoles),
  (req: Request, res: Response) => { void AvailabilityController.deleteFulfilled(req, res); }
);

export default Router;
