import { Request, Response } from "express";
import Product from "../../models/product";

const getProducts = async (req: Request, res: Response) => {
  const { page = 1, perPage = 10, eventDate, search } = req.query;
  const { source } = req.query;
  try {
    const filter: Record<string, any> = { isDeleted: false };
    if (source !== "admin" && source !== "vendor") {
      filter.status = "Active";
    }
    if (search) {
      filter.$or = [
        { title: { $regex: search, $options: "i" } },
        { description: { $regex: search, $options: "i" } },
        { category: { $regex: search, $options: "i" } },
      ];
    }

    if (eventDate) {
      const remainingDays = Math.ceil(
        (new Date(eventDate as string).getTime() - Date.now()) /
          (1000 * 60 * 60 * 24),
      );
      filter.orderMinDays = { $lt: remainingDays };
    }

    const [products, totalItemCount] = await Promise.all([
      Product.find(filter)
        .sort({ createdAt: -1 })
        .populate("storeInfo", "storeName")
        .skip((Number(page) - 1) * Number(perPage))
        .limit(Number(perPage)),
      Product.countDocuments(filter),
    ]);

    res.status(200).json({ products, totalItemCount });
  } catch (err) {
    res.status(500).json({ message: err });
  }
};

export { getProducts };
