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

export const getReport = 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: '/reports',
    baseURL: process.env.ORDER_SERVICE_URL!,
    method: 'get',
    payload: req,
  });
  res.status(resStatus).json(resData);
};

export const downloadReport = 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: '/download-reports',
    // url: '/reports',
    baseURL: process.env.ORDER_SERVICE_URL!,
    method: 'get',
    payload: req,
  });
  // res.status(resStatus).json(resData);
  if (resStatus === 200) {
    const { status, file } = await downloadExcel(resData.data);
    if (status === 'success'){
      return res.status(200).json({
        success: true,
        data: process.env.API_GATEWAY_URL+'/resources/files/'+file,
      });
    }
  }
  return res.status(400).json({
    success: false,
    message: 'Failed to download to report',
  });
};

export const getReportStats = 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: '/reports-stats',
    baseURL: process.env.ORDER_SERVICE_URL!,
    method: 'get',
    payload: req,
  });
  res.status(resStatus).json(resData);
};

export const getRouteReportChart = 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: '/route-report-chart',
    baseURL: process.env.ORDER_SERVICE_URL!,
    method: 'get',
    payload: req,
  });
  res.status(resStatus).json(resData);
};
