const request = require('request');
const decompress = require('decompress');
const decompressTarbz = require('decompress-tarbz2');
const path = require('path');
const fs = require('fs');
const fse = require('fs-extra');

async function downloadFirmware(version) {
    const url = `https://github.com/UltimateHackingKeyboard/firmware/releases/download/${version}/uhk-firmware-${version}.tar.bz2`;
    const outputDir = path.join(__dirname, `../tmp`);
    const output = path.join(outputDir, `uhk-firmware-${version}.tar.bz2`);

    if (!fs.existsSync(outputDir))
        fs.mkdirSync(outputDir);

    await downloadFile(url, output);

    return Promise.resolve(output);
}

async function downloadFile(url, output) {
    return new Promise((resolve, reject) => {
        console.log(`Start download ${url}`);

        const r = request(url);
        r.on('end', () => {
            resolve(output);
        });
        r.on('error', (error) => {
            reject(error);
        });

        r.pipe(fs.createWriteStream(output));
    })
}

(async function main() {
    const agentJson = require('../packages/uhk-agent/src/package.json');

    const extractedFirmwareDir = path.join(__dirname, '../tmp/packages/firmware');
    await fse.emptyDir(extractedFirmwareDir);

    // Download the firmware and add as extra resources
    const firmwarePath = await downloadFirmware(agentJson.firmwareVersion);
    await decompress(firmwarePath, extractedFirmwareDir, {plugins: [decompressTarbz()]});

    await fse.remove(firmwarePath);
})();
