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

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

async function createUser(req, res) {
	const userID = req.userID;
	const { email, password, firstName, lastName, admin } = 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 (!email || !password) {
			return res.status(400).json({ error: "Email și parolă sunt obligatorii!" });
		}

		// Validare email
		const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
		if (!emailRegex.test(email)) {
			return res.status(400).json({ error: "Email invalid!" });
		}

		// Verifică dacă emailul există deja
		const existingUser = await db.User.findOne({
			where: { email: email },
		});

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

		// Verifică lungimea parolei
		if (password.length < 6) {
			return res.status(400).json({ error: "Parola trebuie să aibă cel puțin 6 caractere!" });
		}

		const hash = bcrypt.hashSync(password, 10);

		const newUser = await db.User.create({
			email,
			hash,
			firstName: firstName || null,
			lastName: lastName || null,
			admin: admin ? 1 : 0,
			createdAt: new Date(),
			updatedAt: new Date(),
		});

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