import { apiHandler, db } from "@/helpers/api";

export default apiHandler({
	get: getProduct,
	put: updateProduct,
	delete: deleteProduct,
     post: updateProductProfit, 
});

async function updateProductProfit(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." });
		}

		const product = await db.Products.findByPk(id);

		if (!product) {
			return res.status(404).json({ error: "Produsul nu a fost găsit" });
		}

          const { newPrice } = req.body;

          let finalPrice = parseFloat(newPrice);
		finalPrice = Math.floor(finalPrice) + 0.99;

		product.price = finalPrice.toFixed(2);

		await product.save();

		return res.status(200).json({
			success: true,
			product,
			message: "Produs actualizat cu succes!",
		});
	} catch (error) {
		console.error("Eroare la actualizarea produsului:", error);
		return res.status(500).json({ error: "Eroare la actualizarea produsului" });
	}
}

async function getProduct(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." });
		}

		const product = await db.Products.findByPk(id);

		if (!product) {
			return res.status(404).json({ error: "Produsul nu a fost găsit" });
		}

		return res.status(200).json({ product });
	} catch (error) {
		console.error("Eroare la preluarea produsului:", error);
		return res.status(500).json({ error: "Eroare la preluarea produsului" });
	}
}

async function updateProduct(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." });
		}

		const product = await db.Products.findByPk(id);

		if (!product) {
			return res.status(404).json({ error: "Produsul nu a fost găsit" });
		}

		// Pregătește datele pentru salvare
		const updatedData = {
			...req.body,
			updatedAt: new Date(),
		};

		// Asigură-te că images este string (nu JSON stringify de 2 ori)
		if (typeof updatedData.images === "object") {
			updatedData.images = Array.isArray(updatedData.images)
				? updatedData.images.join("|")
				: updatedData.images;
		}

		// Asigură-te că specifications este în format corect
		if (updatedData.specifications && typeof updatedData.specifications === "object") {
			updatedData.specifications = updatedData.specifications;
		}

		// Asigură-te că variations este în format corect
		if (updatedData.variations && typeof updatedData.variations === "object") {
			updatedData.variations = JSON.stringify(updatedData.variations);
		}

		await product.update(updatedData);

		return res.status(200).json({
			success: true,
			product,
			message: "Produs actualizat cu succes!",
		});
	} catch (error) {
		console.error("Eroare la actualizarea produsului:", error);
		return res.status(500).json({ error: "Eroare la actualizarea produsului" });
	}
}

async function deleteProduct(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." });
		}

		const product = await db.Products.findByPk(id);

		if (!product) {
			return res.status(404).json({ error: "Produsul nu a fost găsit" });
		}

		await product.destroy();

		return res.status(200).json({
			success: true,
			message: "Produs șters cu succes!",
		});
	} catch (error) {
		console.error("Eroare la ștergerea produsului:", error);
		return res.status(500).json({ error: "Eroare la ștergerea produsului" });
	}
}
