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 { ServicesController } from '../controllers/services.controller';

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

Router.get('/', (req: Request, res: Response) => {
  void ServicesController.listPublic(req, res);
});

Router.get(
  '/admin',
  authentification,
  authorization(staffRoles),
  (req: Request, res: Response) => {
    void ServicesController.listAdmin(req, res);
  }
);

Router.post(
  '/categories',
  authentification,
  authorization([Roles.ADMIN]),
  (req: Request, res: Response) => {
    void ServicesController.createCategory(req, res);
  }
);

Router.patch(
  '/categories/:id',
  authentification,
  authorization([Roles.ADMIN]),
  (req: Request, res: Response) => {
    void ServicesController.updateCategory(req, res);
  }
);

Router.delete(
  '/categories/:id',
  authentification,
  authorization([Roles.ADMIN]),
  (req: Request, res: Response) => {
    void ServicesController.deleteCategory(req, res);
  }
);

Router.post(
  '/categories/:categoryId/items',
  authentification,
  authorization([Roles.ADMIN]),
  (req: Request, res: Response) => {
    void ServicesController.createItem(req, res);
  }
);

Router.patch(
  '/items/:id',
  authentification,
  authorization([Roles.ADMIN]),
  (req: Request, res: Response) => {
    void ServicesController.updateItem(req, res);
  }
);

Router.delete(
  '/items/:id',
  authentification,
  authorization([Roles.ADMIN]),
  (req: Request, res: Response) => {
    void ServicesController.deleteItem(req, res);
  }
);

export default Router;
