/**
 * Server-side load y actions para gestión de perfil de usuario
 */
import { fail } from '@sveltejs/kit';
import { authenticatedFetch } from '$lib/server/api';
import type { Actions, PageServerLoad } from './$types';

export const load: PageServerLoad = async ({ parent }) => {
	// El layout /dashboard ya cargó los datos del usuario via validateAuth.
	// Reutilizamos esos datos en lugar de hacer una llamada duplicada.
	const { user } = await parent();
	return {
		profile: user ?? null,
		error: user ? null : 'Error al cargar el perfil'
	};
};

export const actions: Actions = {
	updateProfile: async ({ request, cookies, fetch }) => {
		const formData = await request.formData();

		// Construir objeto de actualización desde FormData
		const updateData: Record<string, any> = {};
		
		for (const [key, value] of formData.entries()) {
			if (key === 'avatar') continue;
			if (value && value !== '') {
				updateData[key] = value;
			}
		}

		// No incluir avatar_url en el PUT /me/profile: el POST /me/avatar ya persistió
		// el valor correcto (clave S3 o ruta local) en UserTenant. Enviar aquí la URL
		// pública sobrescribiría esa clave y rompería el endpoint de servicio de imágenes.

		try {
			const response = await authenticatedFetch(
				'v1/core/users/me/profile',
				{
					method: 'PUT',
					headers: {
						'Content-Type': 'application/json'
					},
					body: JSON.stringify(updateData)
				},
				cookies,
				fetch,
				'/login'
			);

			if (!response.ok) {
				const errorData = await response.json().catch(() => ({}));
				return fail(response.status, { 
					error: errorData.detail || 'Error al actualizar el perfil',
					values: updateData
				});
			}

			const updatedProfile = await response.json();
			return {
				success: true,
				profile: updatedProfile
			};
		} catch (err: any) {
			console.error('Error updating profile:', err);
			return fail(500, { 
				error: 'Error al actualizar el perfil',
				values: updateData
			});
		}
	}
};
