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

// Mapping des types de lieux vers leur traduction française
const locationTypeTranslations: Record<string, string> = {
	mall: 'Centre commercial',
	store: 'Magasin',
	restaurant: 'Restaurant',
	cafe: 'Café',
	hotel: 'Hôtel',
	airport: 'Aéroport',
	station: 'Gare',
	hospital: 'Hôpital',
	gym: 'Salle de sport',
	office: 'Bureau',
	outdoor: 'Extérieur',
	event: 'Événementiel',
	other: 'Autre',
	supermarket: 'Supermarché'
};

export const load: PageServerLoad = async ({ locals }) => {
	const userId = locals.user?.id;
	
	if (!userId) {
		return {
			locations: [] as any[],
			countries: [] as any[],
			locationTypes: [] as any[],
			providers: [] as any[],
			userProviders: [] as any[]
		};
	}
	
	const db = await getSurrealDB();
	const cleanUserId = userId.replace('user:', '');
	
	// Charger uniquement les métadonnées (pays, types, providers) + campagnes actives
	// Les locations seront chargées via l'API côté client
	const [countriesResult, locationTypesResult, providersResult, campaignsResult, userCompanyResult] = await Promise.all([
		db.query<[any[]]>('SELECT * FROM country ORDER BY name_fr'),
		// Récupérer les types de lieux distincts depuis les locations existantes
		db.query<[any[]]>('SELECT location_type FROM location WHERE location_type != NONE GROUP BY location_type'),
		db.query<[any[]]>('SELECT id, name FROM provider ORDER BY name'),
		// Charger les campagnes avec leurs paramètres de ciblage et leurs écrans
		db.query<[any[]]>(`
			SELECT id, name, status, updated_at, 
				start_date, end_date, screens,
				targeting_mode, selected_country, selected_region, selected_department,
				search_address, address_radius,
				budget, cached_budget_used, cached_screens_count,
				ad.id as ad_id,
				ad.name as ad_name
			FROM campaign 
			WHERE user = type::thing("user", $userId) AND status IN ["draft", "active"] 
			ORDER BY updated_at DESC
		`, { userId: cleanUserId }),
		// Charger le pays de l'entreprise de l'utilisateur
		db.query<[any[]]>(`
			SELECT company.country as country FROM user WHERE id = type::thing("user", $userId)
		`, { userId: cleanUserId })
	]);

	// Formater et traduire les types de lieux
	const locationTypes = (locationTypesResult[0] || [])
		.map((item: any) => item.location_type)
		.filter((type: string) => type)
		.map((type: string) => ({
			name: type,
			label: locationTypeTranslations[type] || type.charAt(0).toUpperCase() + type.slice(1)
		}))
		.sort((a, b) => a.label.localeCompare(b.label));

	console.log('📊 Location Types loaded:', locationTypes.length);
	if (locationTypes.length > 0) {
		console.log('First location type:', locationTypes[0]);
	}
	
	// Extraire le pays de l'entreprise de l'utilisateur et le convertir en code ISO
	const userCompanyCountryName = userCompanyResult[0]?.[0]?.country || '';
	const userCompanyCountry = getCountryCode(userCompanyCountryName);
	console.log('🌍 User company country:', userCompanyCountryName, '→', userCompanyCountry);
	
	return {
		locations: [] as any[], // Toujours vide, le client charge via l'API
		countries: serializeData(countriesResult[0] || []),
		locationTypes: locationTypes,
		providers: serializeData(providersResult[0] || []),
		campaigns: serializeData(campaignsResult[0] || []),
		userProviders: [] as any[],
		userCompanyCountry
	};
};
