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

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

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

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

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