import { plugin, type BunPlugin } from "bun";

const audioPlugin: BunPlugin = {
    name: "Audio loader",
    async setup(build) {
        build.onLoad({ filter: /\.(wav|mp3|ogg)$/ }, async (args) => {
            const arrayBuffer = await Bun.file(args.path).arrayBuffer();
            const ext = args.path.split('.').pop();
            const buffer = Buffer.from(arrayBuffer);
            const src = `data:audio/${ext};base64,${buffer.toString('base64')}`;
            return {
                contents: `
                    const audio = document.createElement('audio');
                    const promise = new Promise((resolve, reject) => {
                        audio.oncanplay = resolve;
                        audio.onerror = () => reject(audio.error);
                    });
                    audio.src = (${JSON.stringify(src)});

                    await promise;
                    
                    export default audio;
                `,
                loader: 'js',
            };
        });
    }
};

plugin(audioPlugin);

export default audioPlugin;