import type { PageServerLoad } from './$types';
import { getSurrealDB } from '$lib/server/db';
import { serializeData } from '$lib/utils/serialize';
import { getMultiSessionData } from '$lib/server/auth';

const PAGE_LOAD_TIMEOUT_MS = 1500;

const withTimeout = async <T>(
	promise: Promise<T>,
	ms: number,
	label: string
): Promise<T> => {
	return new Promise<T>((resolve, reject) => {
		const timer = setTimeout(() => {
			reject(new Error(`Timeout ${label} after ${ms}ms`));
		}, ms);

		promise
			.then((value) => {
				clearTimeout(timer);
				resolve(value);
			})
			.catch((error) => {
				clearTimeout(timer);
				reject(error);
			});
	});
};

export const load: PageServerLoad = async ({ cookies }) => {
	try {
		const db = await withTimeout(
			getSurrealDB(),
			PAGE_LOAD_TIMEOUT_MS,
			"getSurrealDB for homepage"
		);
		
		// Récupérer le média de la homepage depuis les settings
		const settingsResult = await withTimeout(
			db.query<[any[]]>(
				'SELECT * FROM setting WHERE key = "homepage_media"'
			),
			PAGE_LOAD_TIMEOUT_MS,
			"query homepage media"
		);
		
		const setting = settingsResult[0]?.[0];
		const homepageMedia = setting?.value || null;
		
		// Vérifier s'il y a un compte existant (multi-session)
		const browserId = cookies.get('neoad_browser_id');
		let existingAccount = null;
		
		if (browserId) {
			try {
				const multiSessionData = await getMultiSessionData(browserId);
				if (multiSessionData && multiSessionData.accounts.length > 0) {
					// Prendre le dernier compte utilisé (actif)
					const activeAccount = multiSessionData.accounts.find(
						acc => acc.session.id === multiSessionData.multiSession.active_session_token
					) || multiSessionData.accounts[0];
					
					existingAccount = {
						first_name: activeAccount.user.first_name,
						last_name: activeAccount.user.last_name,
						company_name: activeAccount.company?.name,
					};
				}
			} catch (error) {
				console.error('Error checking existing account:', error);
			}
		}
		
		return {
			homepageMedia: serializeData(homepageMedia),
			existingAccount: serializeData(existingAccount)
		};
	} catch (error) {
		console.error('Error loading homepage media:', error);
		return {
			homepageMedia: null,
			existingAccount: null
		};
	}
};
