import { json } from '@sveltejs/kit';
import type { RequestHandler } from './$types';
import { getSurrealDB } from '$lib/server/db';

export const PATCH: RequestHandler = async ({ params, request, locals }) => {
	// Vérifier que l'utilisateur est admin
	if (!locals.user || locals.user.role !== 'admin') {
		return json({ error: 'Non autorisé' }, { status: 403 });
	}

	const userId = params.id;
	const updates = await request.json();

	try {
		const db = await getSurrealDB();

		// Préparer les champs à mettre à jour
		const allowedFields = ['email', 'first_name', 'last_name', 'role', 'subscription'];
		const updateFields: Record<string, any> = {};

		for (const field of allowedFields) {
			if (updates[field] !== undefined) {
				updateFields[field] = updates[field];
			}
		}

		// Ajouter la date de mise à jour
		updateFields.updated_at = new Date();

		// Construire la query UPDATE
		const setStatements = Object.keys(updateFields)
			.map(key => `${key} = $${key}`)
			.join(', ');

		const result = await db.query<[any[]]>(
			`UPDATE type::thing("user", $userId) SET ${setStatements}`,
			{ userId, ...updateFields }
		);

		const updatedUser = result[0]?.[0];

		if (!updatedUser) {
			return json({ error: 'Utilisateur non trouvé' }, { status: 404 });
		}

		return json({ user: updatedUser }, { status: 200 });
	} catch (error) {
		console.error('Error updating user:', error);
		return json({ error: 'Erreur lors de la mise à jour' }, { status: 500 });
	}
};
