import { Request, Response } from "express";
import Product from "../../models/product";
import { isValidObjectId } from "mongoose";
import { UserRole } from "../../types/types";

const getProductDetails = async (req: Request, res: Response) => {
  const { id } = req.params;

  if (!isValidObjectId(id)) {
    return res.status(400).json({
      message: "Product ID is not valid",
    });
  }

  const filter: Record<string, any> = { _id: id, isDeleted: false };

  // Visibility comes from the authenticated token, never from the client:
  // admins see any product, a vendor also sees their own inactive products,
  // everyone else only sees Active ones.
  if (req.user?.role === UserRole.vendor) {
    filter.$or = [{ status: "Active" }, { vendor: req.user._id }];
  } else if (req.user?.role !== UserRole.admin) {
    filter.status = "Active";
  }

  try {
    const product = await Product.findOne(filter).populate("storeInfo");

    if (!product) {
      return res.status(404).json({ message: "Product not found" });
    }

    res.status(200).json(product);
  } catch (err) {
    res.status(500).json({ message: err });
  }
};

export { getProductDetails };
