import { json } from '@sveltejs/kit';
import type { RequestHandler } from './$types';
import { getSurrealDB } from '$lib/server/db';
import { generateThumbnail } from '$lib/server/ffmpeg';
import { uploadToR2 } from '$lib/server/cloudflare';

export const POST: RequestHandler = async () => {
	const db = await getSurrealDB();
	
	try {
		console.log('🔍 Searching for ads without thumbnails...\n');
		
		// Récupérer toutes les publicités sans thumbnail
		const adsResult = await db.query<[any[]]>(
			`SELECT * FROM ad WHERE thumbnail_url = NONE AND content.url != NONE`
		);
		
		const ads = adsResult[0] || [];
		console.log(`Found ${ads.length} ads without thumbnails\n`);
		
		const results = [];
		
		for (const ad of ads) {
			const adId = typeof ad.id === 'string' ? ad.id.replace('ad:', '') : ad.id.id;
			const contentUrl = ad.content?.url;
			
			if (!contentUrl) {
				results.push({ ad: ad.name, status: 'skipped', reason: 'no content URL' });
				continue;
			}
			
			// Détecter le type de média
			const isVideo = /\.(mp4|webm|mov|avi|mkv)$/i.test(contentUrl);
			const isImage = /\.(jpg|jpeg|png|gif|webp)$/i.test(contentUrl);
			
			if (!isVideo && !isImage) {
				results.push({ ad: ad.name, status: 'skipped', reason: 'unknown media type' });
				continue;
			}
			
			console.log(`${isVideo ? '📹' : '🖼️'} Processing: ${ad.name}`);
			console.log(`   ${isVideo ? 'Video' : 'Image'}: ${contentUrl}`);
			
			try {
				let thumbnailUrl: string;
				
				if (isImage) {
					// Pour les images, utiliser directement l'image comme thumbnail
					thumbnailUrl = contentUrl;
					console.log(`   ✅ Using image as thumbnail`);
				} else {
					// Pour les vidéos, générer un thumbnail
					const thumbnailBuffer = await generateThumbnail(contentUrl, 1);
					
					// Upload vers R2
					const thumbnailPath = `thumbnails/${adId}/thumbnail.jpg`;
					const result = await uploadToR2(
						new File([new Uint8Array(thumbnailBuffer)], 'thumbnail.jpg', { type: 'image/jpeg' }),
						thumbnailPath,
						'image/jpeg'
					);
					
					thumbnailUrl = result.url;
					console.log(`   ✅ Thumbnail generated: ${thumbnailUrl}`);
				}
				
				// Mettre à jour la publicité
				await db.query(
					`UPDATE type::thing("ad", $adId) SET thumbnail_url = $thumbnailUrl`,
					{ adId, thumbnailUrl }
				);
				
				console.log(`   ✅ Ad updated\n`);
				results.push({ ad: ad.name, status: 'success', thumbnail: thumbnailUrl });
			} catch (error) {
			console.error(`   ❌ Error:`, (error as any)?.message || error);
			results.push({ ad: ad.name, status: 'error', error: (error as any)?.message || String(error) });
			}
		}
		
		return json({ success: true, results });
	} catch (error) {
		console.error('❌ Error:', error);
		return json({ success: false, error: (error as any)?.message || String(error) }, { status: 500 });
	}
};
