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

export const PATCH: RequestHandler = async ({ request, locals }) => {
	if (!locals.user) {
		return json({ error: 'Non autorisé' }, { status: 401 });
	}

	const userId = locals.user.id.replace('user:', '');
	const updates = await request.json();

	try {
		const db = await getSurrealDB();

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

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

		// Gérer les champs de l'entreprise
		if (updates.company) {
			const companyFields = ['siret', 'country', 'city', 'postal_code'];
			for (const field of companyFields) {
				if (updates.company[field] !== undefined) {
					updateFields[`company.${field}`] = updates.company[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 profile:', error);
		return json({ error: 'Erreur lors de la mise à jour' }, { status: 500 });
	}
};
