// pages/api/admin/users/update.js
import { apiHandler, db } from "@/helpers/api";
import bcrypt from "bcryptjs";

export default apiHandler({
	post: updateUser,
});

async function updateUser(req, res) {
	const userID = req.userID;
	const { id, email, firstName, lastName, admin, password } = req.body;

	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 utilizator este obligatoriu!" });
		}

		const targetUser = await db.User.findByPk(id);

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

		// Verifică dacă emailul există deja (pentru alt utilizator)
		if (email && email !== targetUser.email) {
			const existingUser = await db.User.findOne({
				where: { email: email },
			});

			if (existingUser) {
				return res.status(400).json({ error: "Emailul este deja folosit!" });
			}
		}

		// Pregătește datele pentru update
		const updateData = {};

		if (email) updateData.email = email;
		if (firstName !== undefined) updateData.firstName = firstName;
		if (lastName !== undefined) updateData.lastName = lastName;
		if (admin !== undefined) updateData.admin = admin ? 1 : 0;

		// Dacă se schimbă parola
		if (password && password.trim() !== "") {
			updateData.hash = bcrypt.hashSync(password, 10);
		}

		updateData.updatedAt = new Date();

		await targetUser.update(updateData);

		return res.status(200).json({
			message: "Utilizatorul a fost actualizat cu succes!",
			user: {
				id: targetUser.id,
				email: targetUser.email,
				firstName: targetUser.firstName,
				lastName: targetUser.lastName,
				admin: targetUser.admin,
				createdAt: targetUser.createdAt,
				updatedAt: targetUser.updatedAt,
			},
		});
	} catch (error) {
		console.error("Eroare la actualizarea utilizatorului:", error);
		return res.status(500).json({ error: "Eroare la actualizarea utilizatorului" });
	}
}
