import { json, error } from '@sveltejs/kit';
import type { RequestHandler } from './$types';

export const GET: RequestHandler = async ({ url }) => {
	const query = url.searchParams.get('q');
	const type = url.searchParams.get('type') || 'search'; // 'search' ou 'reverse'
	const limit = url.searchParams.get('limit') || '1';

	if (!query) {
		throw error(400, 'Missing query parameter');
	}

	try {
		let nominatimUrl: string;

		if (type === 'reverse') {
			// Reverse geocoding: lat,lon -> address
			const [lat, lon] = query.split(',').map((s) => s.trim());
			if (!lat || !lon) {
				throw error(400, 'Invalid coordinates format');
			}
			nominatimUrl = `https://nominatim.openstreetmap.org/reverse?format=json&lat=${lat}&lon=${lon}`;
		} else {
			// Forward geocoding: address -> lat,lon
			nominatimUrl = `https://nominatim.openstreetmap.org/search?format=json&q=${encodeURIComponent(query)},France&limit=${limit}&addressdetails=1&accept-language=fr`;
		}

		const response = await fetch(nominatimUrl, {
			headers: {
				'User-Agent': 'NEOAD/1.0'
			}
		});

		if (!response.ok) {
			throw error(response.status, `Nominatim returned ${response.status}`);
		}

		const data = await response.json();
		return json(data);
	} catch (err) {
		console.error('Geocoding error:', err);
		throw error(500, `Geocoding failed: ${err}`);
	}
};
