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

export const load: PageServerLoad = async ({ locals }) => {
	const userId = locals.user?.id;
	
	if (!userId) {
		return {
			campaigns: [],
			stats: { total: 0, draft: 0, active: 0, paused: 0, completed: 0, cancelled: 0 }
		};
	}
	
	const cleanUserId = userId.replace('user:', '');
	const db = await getSurrealDB();
	
	try {
		// Récupérer toutes les campagnes avec leurs publicités et réservations
		const query = `
			SELECT 
				*,
				(SELECT 
					name, 
					thumbnail_url, 
					custom_thumbnail_url,
					status, 
					output_url,
					content.url as content_url, 
					content.thumbnail_url as content_thumbnail,
					(SELECT url, type FROM media_map WHERE ad = $parent.id AND type = "image" LIMIT 1)[0].url as first_image_url
				FROM ad WHERE id = $parent.ad)[0] as ad_info,
				(SELECT count() FROM campaign_booking WHERE campaign = $parent.id GROUP ALL)[0].count as bookings_count,
				(SELECT count() FROM campaign_booking WHERE campaign = $parent.id AND status = "paid" GROUP ALL)[0].count as paid_bookings_count
			FROM campaign 
			WHERE user = type::thing("user", $userId)
			ORDER BY updated_at DESC
		`;
		
		const campaignsResult = await db.query<[any[]]>(query, {
			userId: cleanUserId
		});
		
		const campaigns = campaignsResult[0] || [];
		
		// Statistiques calculées depuis les campagnes chargées
		const stats = {
			total: campaigns.length,
			draft: campaigns.filter((c: any) => c.status === 'draft').length,
			active: campaigns.filter((c: any) => c.status === 'active').length,
			paused: campaigns.filter((c: any) => c.status === 'paused').length,
			completed: campaigns.filter((c: any) => c.status === 'completed').length,
			cancelled: campaigns.filter((c: any) => c.status === 'cancelled').length,
		};
		
		return {
			campaigns: serializeData(campaigns),
			stats
		};
	} catch (error) {
		console.error('Error loading campaigns:', error);
		return {
			campaigns: [],
			stats: { total: 0, draft: 0, active: 0, paused: 0, completed: 0, cancelled: 0 }
		};
	}
};
