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

export const load: PageServerLoad = async ({ locals, url }) => {
	const userId = locals.user?.id;
	
	if (!userId) {
		return {
			ads: [],
			stats: { total: 0, draft: 0, creating: 0, validation: 0, ready: 0, live: 0, archived: 0 }
		};
	}
	
	const cleanUserId = userId.replace('user:', '');
	const db = await getSurrealDB();
	
	try {
		// Filtre par statut depuis l'URL
		const filterStatus = url.searchParams.get('status');
		
		// Récupérer les publicités SANS les formats (améliore les performances)
		let query = `
			SELECT 
				*
			FROM ad 
			WHERE user = type::thing("user", $userId)
		`;
		
		if (filterStatus && filterStatus !== 'all') {
			query += ` AND status = $status`;
		}
		
		query += ` ORDER BY updated_at DESC`;
		
		const adsResult = await db.query<[any[]]>(query, { 
			userId: cleanUserId,
			status: filterStatus 
		});
		
		// Statistiques par statut - Optimisé en une seule requête
		const statsResult = await db.query<[any[]]>(`
			SELECT 
				count() as total,
				math::sum(IF(status = "draft", 1, 0)) as draft,
				math::sum(IF(status = "creating", 1, 0)) as creating,
				math::sum(IF(status = "validation", 1, 0)) as validation,
				math::sum(IF(status = "ready", 1, 0)) as ready,
				math::sum(IF(status = "live", 1, 0)) as live,
				math::sum(IF(status = "archived", 1, 0)) as archived
			FROM ad WHERE user = type::thing("user", $userId) GROUP ALL
		`, { userId: cleanUserId });
		
		return {
			ads: serializeData(adsResult[0] || []),
			stats: statsResult[0]?.[0] || { total: 0, draft: 0, creating: 0, validation: 0, ready: 0, live: 0, archived: 0 },
			currentFilter: filterStatus || 'all'
		};
	} catch (error) {
		console.error('Error loading ads:', error);
		return {
			ads: [],
			stats: { total: 0, draft: 0, creating: 0, validation: 0, ready: 0, live: 0, archived: 0 },
			currentFilter: 'all'
		};
	}
};
