const path = require("path");
const fs = require("fs");
const buildUtils = require("./buildutils");
function gulptasksCordova($, gulp, buildFolder) {
    const cdvRes = path.join("..", "..", "res");
    // Cleans up the app assets
    // Removes all temporary folders used while optimizing the assets
    gulp.task("cleanupAppAssetsBuiltFolder", () => {
        return gulp
            .src(path.join(cdvRes, "built"), { read: false, allowEmpty: true })
            .pipe($.clean({ force: true }));
    });
    // Optimizes all built assets
    gulp.task("optimizeBuiltAppAssets", () => {
        return gulp
            .src(path.join(cdvRes, "built", "**", "*.png"))
            .pipe($.flatten())
            .pipe($.imagemin([$.imagemin.optipng({ optimizationLevel: 1 })]))
            .pipe(gulp.dest(path.join(cdvRes, "built")));
    });
    // Scales the icon resources
    gulp.task("scaleIconIos", async () => {
        const sizes = [
            180,
            60,
            120,
            76,
            152,
            40,
            80,
            57,
            114,
            72,
            144,
            167,
            29,
            58,
            87,
            50,
            100,
            167,
            20,
            1024,
            24,
            48,
            55,
            172,
            196,
        ];
        for (let i = 0; i < sizes.length; ++i) {
            const size = sizes[i];
            console.log("Scaling icon to", size, "x", size);
            const img = await $.jimp.read(path.join(cdvRes, "ios", "icon-prefab.png"));
            await img.resize(size, size).write(path.join(cdvRes, "built", "ios", "icon@" + size + ".png"));
        }
    });
    gulp.task("copyOtherIosResources", () => {
        return gulp
            .src(path.join(cdvRes, "ios", "splash-prefab.png"))
            .pipe($.rename("Default@2x~universal~anyany.png"))
            .pipe(gulp.dest(path.join(cdvRes, "built", "ios")));
    });
    gulp.task("prepareIosRes", gulp.series("scaleIconIos", "copyOtherIosResources"));
    gulp.task("copyAndroidResources", () => {
        return gulp
            .src(path.join(cdvRes, "android", "**", "*.*"))
            .pipe(gulp.dest(path.join(cdvRes, "built", "android")));
    });
    gulp.task("prepareAndroidRes", gulp.series("copyAndroidResources"));
    gulp.task(
        "prepareCordovaAssets",
        gulp.series(
            "cleanupAppAssetsBuiltFolder",
            gulp.parallel("prepareIosRes", "prepareAndroidRes"),
            "optimizeBuiltAppAssets"
        )
    );
    // Patches the config.xml by replacing the app id to app_beta
    gulp.task("patchConfigXML", cb => {
        const configUrl = path.join("..", "..", "config.xml");
        let configContent = fs.readFileSync(configUrl).toString();
        const version = buildUtils.getVersion();
        configContent = configContent.replace("%VERSION%", version);
        configContent = configContent.replace(' id="io.shapez.app" ', ' id="io.shapez.app_beta" ');
        configContent = configContent.replace("Shapez.io", "Shapez.io BETA");
        fs.writeFileSync(configUrl, configContent);
        cb();
    });
    gulp.task("patchConfigXMLChangeStagingToProd", cb => {
        const configUrl = path.join("..", "..", "config.xml");
        let configContent = fs.readFileSync(configUrl).toString();
        configContent = configContent.replace(' id="io.shapez.app_beta" ', ' id="io.shapez.app" ');
        configContent = configContent.replace("Shapez.io BETA", "Shapez.io");
        fs.writeFileSync(configUrl, configContent);
        cb();
    });
    // Triggers a new build on phonegap
    gulp.task("triggerPhonegapBuild", () => {
        return gulp
            .src("src/html/", { dot: false })
            .pipe(
                $.phonegapBuild({
                    isRepository: true,
                    appId: "3339820",
                    platforms: ["android", "ios"],
                    user: {
                        token: process.env.SHAPEZ_CLI_PHONEGAP_KEY,
                    },
                })
            )
            .pipe(
                $.phonegapBuild({
                    isRepository: true,
                    appId: "3537816",
                    platforms: ["android", "ios"],
                    user: {
                        token: process.env.SHAPEZ_CLI_PHONEGAP_KEY,
                    },
                })
            );
    });
}
module.exports = {
    gulptasksCordova,
};