import { Request, Response } from 'express';
import { verifyAccess } from '../middlewares/authentication';
import callService from '../utils/serviceCall';

export const createAdhoc = async (req: Request, res: Response) => {
  const validAccess = await verifyAccess(req, 'create_adhocs');
  if (!validAccess) {
    res.status(403).json({
      success: false,
      message: 'Access denied',
    });
    return;
  }
  const { resStatus, resData } = await callService({
    url: '/adhoc/create',
    baseURL: process.env.ORDER_SERVICE_URL!,
    method: 'post',
    payload: req,
  });
  res.status(resStatus).json(resData);
};

export const editAdhoc = async (req: Request, res: Response) => {
  const { adhocID } = req.params;
  const validAccess = await verifyAccess(req, 'create_adhocs');
  if (!validAccess) {
    res.status(403).json({
      success: false,
      message: 'Access denied',
    });
    return;
  }
  const { resStatus, resData } = await callService({
    url: `/adhoc/${adhocID}/edit`,
    baseURL: process.env.ORDER_SERVICE_URL!,
    method: 'patch',
    payload: req,
  });
  res.status(resStatus).json(resData);
};

export const getAdhocs = async (req: Request, res: Response) => {
  const validAccess = await verifyAccess(req, 'view_adhocs', 'create_orders');
  if (!validAccess) {
    res.status(403).json({
      success: false,
      message: 'Access denied',
    });
    return;
  }
  const { resStatus, resData } = await callService({
    url: '/adhoc/get',
    baseURL: process.env.ORDER_SERVICE_URL!,
    method: 'get',
    payload: req,
  });
  res.status(resStatus).json(resData);
};

export const startAdhoc = async (req: Request, res: Response) => {
  const { routeID } = req.params;
  const validAccess = await verifyAccess(req, 'start_adhocs');
  if (!validAccess) {
    res.status(403).json({
      success: false,
      message: 'Access denied',
    });
    return;
  }
  const { resStatus, resData } = await callService({
    url: `/routes/${routeID}/adhocs/start`,
    baseURL: process.env.ORDER_SERVICE_URL!,
    method: 'patch',
    payload: req,
  });
  res.status(resStatus).json(resData);
};

export const endAdhoc = async (req: Request, res: Response) => {
  const { routeID } = req.params;
  const validAccess = await verifyAccess(req, 'end_adhocs');
  if (!validAccess) {
    res.status(403).json({
      success: false,
      message: 'Access denied',
    });
    return;
  }
  const { resStatus, resData } = await callService({
    url: `/routes/${routeID}/adhocs/end`,
    baseURL: process.env.ORDER_SERVICE_URL!,
    method: 'patch',
    payload: req,
  });
  res.status(resStatus).json(resData);
};
