import { getSurrealDB } from './db';

export interface CreateMediaParams {
	userId: string;
	companyId?: string | null;
	name: string;
	originalName?: string;
	type: 'image' | 'video';
	mimeType: string;
	url: string;
	cloudflareKey: string;
	thumbnailUrl?: string;
	sizeBytes: number;
	width?: number;
	height?: number;
	durationSeconds?: number;
	metadata?: Record<string, any>;
}

/**
 * Créer une entrée dans la médiathèque
 */
export async function createMediaRecord(params: CreateMediaParams): Promise<any> {
	const db = await getSurrealDB();
	
	// Assurer que userId n'a pas le préfixe avant de traiter
	const cleanUserId = params.userId.includes(':') 
		? params.userId.split(':')[1] 
		: params.userId;
	
	const mediaData: any = {
		user: `user:${cleanUserId}`,
		uploaded_by: `user:${cleanUserId}`,
		name: params.name,
		original_name: params.originalName || params.name,
		// Support pour schema v1 et v2
		type: params.type,
		media_type: params.type,
		mime_type: params.mimeType,
		cloudflare_key: params.cloudflareKey,
		url: params.url,
		size_bytes: params.sizeBytes,
		tags: []
	};
	
	// Ajouter company si fournie - utiliser type::thing pour créer une référence de record
	if (params.companyId) {
		const cleanCompanyId = params.companyId.includes(':') 
			? params.companyId.split(':')[1] 
			: params.companyId;
		mediaData.company = cleanCompanyId; // On passera en paramètre pour utiliser type::thing
	}
	
	// Ajouter thumbnail_url si fourni
	if (params.thumbnailUrl) {
		mediaData.thumbnail_url = params.thumbnailUrl;
	}
	
	// Ajouter les dimensions si fournies
	if (params.width) mediaData.width = params.width;
	if (params.height) mediaData.height = params.height;
	if (params.durationSeconds) mediaData.duration_seconds = params.durationSeconds;
	if (params.metadata) mediaData.metadata = params.metadata;
	
	console.log('Creating media record with:', mediaData);
	
	// Ne pas inclure folder si on ne l'a pas (c'est un champ optionnel qui doit être absent, pas null)
	// Ne pas inclure les autres champs optionnels si on ne les a pas
	
	console.log('Media.ts createMediaRecord - mediaData being created:', mediaData);
	
	// Si on a une company, utiliser type::thing pour créer la référence correctement
	let result;
	if (mediaData.company) {
		const companyId = mediaData.company;
		delete mediaData.company; // Retirer du data, on l'ajoutera via la requête
		result = await db.query<[any[]]>(
			`CREATE media CONTENT $data SET company = type::thing("company", $companyId) RETURN *`,
			{ data: mediaData, companyId }
		);
	} else {
		result = await db.query<[any[]]>(
			`CREATE media CONTENT $data RETURN *`,
			{ data: mediaData }
		);
	}
	
	return result[0]?.[0];
}

/**
 * Détecter le type de média depuis le mime type
 */
export function getMediaType(mimeType: string): 'image' | 'video' {
	if (mimeType.startsWith('video/')) return 'video';
	if (mimeType.startsWith('image/')) return 'image';
	// Par défaut, on suppose que c'est une image
	return 'image';
}
