import { OpenSheetMusicDisplay, CanvasVexFlowBackend } from "../../src";
import { TestUtils } from "./TestUtils";
//import fs from "fs";

// experimental code, shouldn't be included in Karma test suite

describe("GeneratePNGImages", () => {
    // Test all the following xml files:
    const sampleFilenames: string[] = [
        "Beethoven_AnDieFerneGeliebte.xml",
        // "CharlesGounod_Meditation.xml",
        // "Debussy_Mandoline.xml",
        // "Dichterliebe01.xml",
        // "JohannSebastianBach_Air.xml",
        // "JohannSebastianBach_PraeludiumInCDur_BWV846_1.xml",
        // "JosephHaydn_ConcertanteCello.xml",
        // "Mozart_AnChloe.xml",
        // "Mozart_DasVeilchen.xml",
        "MuzioClementi_SonatinaOpus36No1_Part1.xml",
        // "MuzioClementi_SonatinaOpus36No1_Part2.xml",
        // "MuzioClementi_SonatinaOpus36No3_Part1.xml",
        // "MuzioClementi_SonatinaOpus36No3_Part2.xml",
        // "Saltarello.xml",
        // "ScottJoplin_EliteSyncopations.xml",
        // "ScottJoplin_The_Entertainer.xml",
        // "TelemannWV40.102_Sonate-Nr.1.1-Dolce.xml",
        // "TelemannWV40.102_Sonate-Nr.1.2-Allegro-F-Dur.xml",
    ];
    for (const score of sampleFilenames) {
        generatePNG(score);
    }

    // TODO This is just example code for now.
    // generate PNG. TODO fs doesn't work with Karma. This is the big problem that needs to be worked around with ts/Karma.
    function generatePNG(sampleFilename: string): void {
        it(sampleFilename, (done: Mocha.Done) => {
            // Load the xml file content
            const score: Document = TestUtils.getScore(sampleFilename);
            const div: HTMLElement = document.createElement("div");
            const openSheetMusicDisplay: OpenSheetMusicDisplay =
                new OpenSheetMusicDisplay(div, { autoResize: false, backend: "canvas"});
            openSheetMusicDisplay.load(score);

            const testDir: string = "../data/images";
            //fs.mkdirSync(testDir, { recursive: true });

            const fileName: string = `${testDir}/${sampleFilename}.png`;
            console.log("fileName: " + fileName);

            console.log("before buffer");
            const canvasBackend: CanvasVexFlowBackend = openSheetMusicDisplay.Drawer.Backends[0] as CanvasVexFlowBackend;
            const imageData: string = (canvasBackend.getCanvas() as HTMLCanvasElement).toDataURL().split(";base64,").pop();
            const imageBuffer: Buffer = Buffer.from(imageData, "base64");
            console.log("imageBuffer.length: " + imageBuffer.length);
            //console.log("after buffer");
            //let arraybuffer = Uint8Array.from(imageBuffer, 'base64').buffer;

            //fs.writeFileSync(fileName, imageBuffer, { encoding: "base64" });

            done();
            }).timeout(30000);
    }
});