// 导入wasm模块
let wasmModule;



var Module = {
    onRuntimeInitialized: function (e) {

        //    let baseData= document.getElementById("base64Image").src;
        //    baseData=baseData.split(",")[1];
        //    let buffer = base64ToArrayBuffer(baseData);
        //        decodeToWebpp(buffer);
        // document.getElementById("base64Image").src = fileurl;
        // decodeIt();
    postMessage({ type: 'ready' });
    console.log(Module._malloc(4))


    },
    onAbort: (e) => {
        alert(e);
    }
};
// 初始化wasm模块
self.importScripts('convert_image_to_webp.js');
// CreateModule().then(module => {
//     wasmModule = module;
//     postMessage({ type: 'ready' });
// }).catch(err => {
//     postMessage({ type: 'error', error: 'Failed to load WASM module: ' + err.message });
// });

// 处理主线程发来的消息
self.onmessage = async function (e) {

    const {
        buffer,
        width,
        height,
        quality,
    } = e.data;
    // 显示原始图片大小
    let size = (buffer.byteLength / 1024).toFixed(2);

    // 转换图像为 Uint8Array
    var inputData = new Uint8Array(buffer);

    // 分配内存以存储输出 WebP 大小
    var outputSizePtr = Module._malloc(4); // 存储输出大小的指针

    // 设置目标宽高和质量因子
    var inputDataPtr = Module._malloc(inputData.length);
    Module.HEAPU8.set(inputData, inputDataPtr);
    var webpPtr = Module._convert_image_to_webp(inputDataPtr, inputData.length, width, height,0,0, quality, outputSizePtr);

    // 调用 WebAssembly 函数进行图像转换，返回 WebP 数据指针

    // 获取 WebP 数据大小
    var outputSize = Module.getValue(outputSizePtr, 'i32');

    // 从 WebAssembly 内存中读取 WebP 数据
    var webpData = new Uint8Array(Module.HEAPU8.buffer, webpPtr, outputSize);
    // document.getElementById('result').innerText += '      ' + (Date.now() - startTime) + 'ms';

    // 显示 WebP 图片大小
    // document.getElementById("webpSize").textContent = `${size}KB => ${(outputSize / 1024).toFixed(2)}KB`;

    // 将 WebP 数据转换为 base64，并显示
    // let img = document.getElementById("webpImage");
    // img.src = "data:image/webp;base64," + arrayBufferToBase64(webpData);

    // 使用完成后释放内存
    Module._free(outputSizePtr);
    Module._free(webpPtr);
    Module._free(inputDataPtr);
    postMessage({ type: 'webp', webpData });
};