/**
 * H5 专用的 SVGA 初始化代码
 * 使用 CDN 方式加载 SVGA，避免 webpack 解析问题
 */

// 加载 SVGA 库（使用 CDN 方式，避免 webpack 解析问题）
function loadSVGALibrary() {
	return new Promise((resolve, reject) => {
		// 检查是否已经加载
		if (window.SVGAPlayer && window.SVGAPlayer.Parser && window.SVGAPlayer.Player) {
			resolve(window.SVGAPlayer)
			return
		}
		
		// 检查是否正在加载
		if (window.__SVGA_LOADING__) {
			window.__SVGA_LOADING__.then(resolve).catch(reject)
			return
		}
		
		// 开始从 CDN 加载（使用动态导入方式）
		window.__SVGA_LOADING__ = (async () => {
			try {
				// 使用 Function 构造函数动态导入，完全避免 webpack 静态分析
				const dynamicImport = new Function('url', 'return import(url)')
				const svgaModule = await dynamicImport('https://unpkg.com/svga@2.5.7/dist/index.esm.js')
				if (svgaModule && svgaModule.Parser && svgaModule.Player) {
					return svgaModule
				}
				throw new Error('SVGA module structure not recognized')
			} catch (error) {
				throw new Error('Failed to load SVGA library from CDN: ' + error.message)
			}
		})()
		
		window.__SVGA_LOADING__.then(resolve).catch(reject)
	})
}

export async function initSVGA(canvasId, giftType, onEnd) {
	try {
		// 加载 SVGA 库（CDN 方式）
		const SVGA = await loadSVGALibrary()
		const { Parser, Player } = SVGA
		const parser = new Parser()
		
		// 根据礼物类型加载对应的 SVGA 文件
		const svgaUrl = getSVGAUrl(giftType)
		if (!svgaUrl) {
			console.warn('SVGA file not found for gift type:', giftType)
			return null
		}
		
		const svga = await parser.load(svgaUrl)
		const canvas = document.getElementById(canvasId)
		if (!canvas) return null
		
		const player = new Player(canvas)
		await player.mount(svga)
		
		// 监听动画事件
		player.onEnd = onEnd
		
		return { parser, player }
	} catch (error) {
		console.error('SVGA init error:', error)
		return null
	}
}

export function getSVGAUrl(giftType) {
	// 根据礼物类型返回对应的 SVGA 文件路径
	const svgaMap = {
		'rose': '/static/gifts/rose.svga',
		'heart': '/static/gifts/heart.svga',
		'star': '/static/gifts/star.svga',
		'default': '/static/gifts/default.svga'
	}
	return svgaMap[giftType] || svgaMap['default']
}

export function destroySVGA(parser, player) {
	if (player) {
		player.clear()
		player.destroy()
	}
	if (parser) {
		parser.destroy()
	}
}

