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

export default async function handler(req, res) {
	if (req.method !== 'GET') {
		return res.status(405).json({ error: "Method not allowed" });
	}

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

	const { includeChildren } = req.query;

	try {
		if (includeChildren === 'true') {
			const getParentsWithChildren = await db.Categories.findAll({
				where: { parentID: 0 },
				include: [
					{
						model: db.Categories,
						as: 'children',
						include: [
							{
								model: db.Categories,
								as: 'subChildren',
								required: false,
							}
						],
						required: false
					}
				],
				raw: false
			});
			
			return res.status(200).json({ categories: getParentsWithChildren });
		} else {
			const mainCategories = await db.Categories.findAll({
				where: { parentID: 0 },
				attributes: ['id', 'name', 'name_en', 'name_it', 'name_fr', 'name_de', 'slug', 'title'],
				order: [['id', 'ASC']]
			});

			return res.status(200).json({ 
				categories: mainCategories,
				total: mainCategories.length 
			});
		}
	} catch (error) {
		console.error("Error fetching categories:", error);
		return res.status(500).json({ 
			error: "Internal server error", 
			status: 500 
		});
	}
}