// pages/api/admin/orders/[id].js
import { apiHandler, db } from "@/helpers/api";

export default apiHandler({
	get: getOrderDetails,
});

async function getOrderDetails(req, res) {
	const userID = req.userID;
	const { id } = req.query;

	if (!db.initialized) await db.initialize();

	try {
		const userData = await db.User.findByPk(userID);

		if (!userData) return res.status(404).json({ error: "Unknown!" });

		if (userData.admin < 1) {
			return res.status(401).json({ error: "Unauthorized access." });
		}

		if (!id) {
			return res.status(400).json({ error: "ID comandă este obligatoriu!" });
		}

		// Query pentru comandă - FĂRĂ include
		const order = await db.Orders.findByPk(id);

		if (!order) {
			return res.status(404).json({ error: "Comanda nu există!" });
		}

		const orderData = order.toJSON();

		// Parse items din JSON
		let items = [];
		try {
			items = typeof orderData.items === "string" 
				? JSON.parse(orderData.items) 
				: orderData.items;
		} catch (e) {
			console.error("Error parsing items:", e);
			items = [];
		}

		// Calculează totalul și subtotalul
		const subtotal = items.reduce((sum, item) => {
			return sum + (parseFloat(item.price) * parseInt(item.quantity));
		}, 0);

		const total = subtotal; // Adaugă taxe/discount dacă e cazul

		// Query separat pentru User dacă există userID
		let user = null;
		if (orderData.userID && orderData.userID > 0) {
			try {
				const userRecord = await db.User.findByPk(orderData.userID, {
					attributes: ["id", "email", "firstName", "lastName", "createdAt"],
				});
				user = userRecord ? userRecord.toJSON() : null;
			} catch (e) {
				console.error(`Error fetching user ${orderData.userID}:`, e.message);
				user = null;
			}
		}

		return res.status(200).json({
			order: {
				...orderData,
				items,
				subtotal: subtotal.toFixed(2),
				total: total.toFixed(2),
				user
			}
		});
	} catch (error) {
		console.error("Eroare la obținerea detaliilor comenzii:", error);
		return res.status(500).json({ error: "Eroare la obținerea detaliilor comenzii" });
	}
}