/**
 * Polyfill global para BlobBuilder
 * Deve ser executado ANTES de qualquer import de lib-jitsi-meet
 *
 * BlobBuilder é uma API antiga dos navegadores que foi substituída pelo construtor Blob
 * A biblioteca lib-jitsi-meet pode tentar usar BlobBuilder em navegadores modernos
 */

export function adicionarBlobBuilderPolyfill(): void {
	if (typeof window === 'undefined') return;

	// Verificar se já foi adicionado (evitar múltiplas execuções)
	// eslint-disable-next-line @typescript-eslint/no-explicit-any
	if ((window as any).__blobBuilderPolyfillAdded) {
		return;
	}

	// Implementar BlobBuilder usando Blob moderno
	// eslint-disable-next-line @typescript-eslint/no-explicit-any
	const BlobBuilderClass = class BlobBuilder {
		private parts: BlobPart[] = [];

		append(data: BlobPart): void {
			this.parts.push(data);
		}

		getBlob(contentType?: string): Blob {
			return new Blob(this.parts, contentType ? { type: contentType } : undefined);
		}
	};

	// Adicionar em todos os possíveis locais onde a biblioteca pode procurar
	// eslint-disable-next-line @typescript-eslint/no-explicit-any
	const win = window as any;

	// Definir BlobBuilder se não existir
	if (typeof win.BlobBuilder === 'undefined') {
		win.BlobBuilder = BlobBuilderClass;
	}

	// Variantes de navegadores antigos
	if (typeof win.WebKitBlobBuilder === 'undefined') {
		win.WebKitBlobBuilder = BlobBuilderClass;
	}

	if (typeof win.MozBlobBuilder === 'undefined') {
		win.MozBlobBuilder = BlobBuilderClass;
	}

	if (typeof win.MSBlobBuilder === 'undefined') {
		win.MSBlobBuilder = BlobBuilderClass;
	}

	// Adicionar no global scope
	if (typeof globalThis !== 'undefined') {
		if (typeof (globalThis as any).BlobBuilder === 'undefined') {
			(globalThis as any).BlobBuilder = BlobBuilderClass;
		}
		if (typeof (globalThis as any).WebKitBlobBuilder === 'undefined') {
			(globalThis as any).WebKitBlobBuilder = BlobBuilderClass;
		}
		if (typeof (globalThis as any).MozBlobBuilder === 'undefined') {
			(globalThis as any).MozBlobBuilder = BlobBuilderClass;
		}
	}

	// Marcar que o polyfill foi adicionado
	win.__blobBuilderPolyfillAdded = true;

	console.log('✅ Polyfill BlobBuilder adicionado globalmente');
}

// Executar imediatamente se estiver no browser
if (typeof window !== 'undefined') {
	adicionarBlobBuilderPolyfill();
}
