import type { Request, Response } from "express";
import { AllSalesService } from "../services/AllSalesService.js";
import { AllSalesPdf } from "../utils/pdf/AllSalesPdf.js";

const allSalesService = new AllSalesService();

export const getAllSales = async (req: Request, res: Response): Promise<void> => {
  try {
    const page = Number(req.query.page) || 1;
    const limit = Number(req.query.limit) || 10;
    const dateFrom = req.query.dateFrom ? String(req.query.dateFrom) : undefined;
    const dateTo = req.query.dateTo ? String(req.query.dateTo) : undefined;
    const search = req.query.search ? String(req.query.search) : undefined;

    const result = await allSalesService.getAllSales(page, limit, dateFrom, dateTo, search);
    res.json({ message: "All sales fetched successfully", result });
  } catch (err: any) {
    res.status(500).json({ message: err.message });
  }
};

export const exportPdf = async (req: Request, res: Response): Promise<void> => {
  try {
    const dateFrom = req.query.dateFrom ? String(req.query.dateFrom) : undefined;
    const dateTo = req.query.dateTo ? String(req.query.dateTo) : undefined;
    const search = req.query.search ? String(req.query.search) : undefined;

    // Fetch all records for the export
    const result = await allSalesService.getAllSales(1, 1000000, dateFrom, dateTo, search);

    if (!result.data || result.data.length === 0) {
      res.status(400).json({ message: "No data available to export" });
      return;
    }

    await AllSalesPdf.generate(result.data, res, {
      ...(search ? { search } : {}),
      ...(dateFrom ? { startDate: dateFrom } : {}),
      ...(dateTo ? { endDate: dateTo } : {}),
    });
  } catch (err: any) {
    res.status(500).json({ message: err.message });
  }
};

