let promises = [];
let scripts = [];
let optionalScripts = [];


function loadScript(url) {
    return new Promise(function (resolve, reject) {
        let script = document.createElement("script");
        script.src = url;
        script.async = false;
        script.onload = function () {
            resolve(url);
        };
        script.onerror = function () {
            reject(url);
        };
        document.body.appendChild(script);
    });
}

function init(optionalScripts) {
    scripts.forEach(function (url) {
        promises.push(loadScript(url));
    });

    if (optionalScripts) {
        optionalScripts.forEach(function (url) {
            promises.push(loadScript(url));
        });
    }
}

function scriptsActivator(
    lazyload = false,
    swiper = false,
    popper = false,
    bootstrap = false,
    aos = false,
    floatingLabels = false
) {
    scripts = [];
    scripts.push(
        "/files/base/layout/js/_global-functions.js",
        "/files/base/layout/js/_cookie-handling.js",
        "/files/base/layout/js/_element-handling.js",
        "/files/base/layout/js/_scrollToAnchor-handling.js"
    );

    if (lazyload) {
        scripts.push(
            "/files/base/layout/_vendor/node_modules/vanilla-lazyload/dist/lazyload.min.js"
        );
        options_lazyload = true;
    } else {
        options_lazyload = false;
    }

    if (swiper) {
        scripts.push(
            "/files/base/layout/_vendor/node_modules/swiper/swiper-bundle.min.js",
        );
        options_swiper = true;
    } else {
        options_swiper = false;
    }

    if (popper) {
        scripts.push(
            "/files/base/layout/_vendor/node_modules/@popperjs/core/dist/umd/popper.min.js"
        );
        options_popper = true;
    } else {
        options_popper = false;
    }

    if (bootstrap) {
        scripts.push(
            "/files/base/layout/_vendor/node_modules/bootstrap/dist/js/bootstrap.bundle.min.js"
        );
        options_bootstrap = true;
    } else {
        options_bootstrap = false;
    }

    if (aos) {
        scripts.push(
            "/files/base/layout/_vendor/node_modules/aos/dist/aos.js",
        );
        options_aos = true;
    }

    if (floatingLabels) {
        scripts.push(
            "/files/base/layout/js/_floating-labels.js",
        );
        options_floatingLabels = true;
    }
    else {
        options_floatingLabels = false;
    }
}


let themeScripts = [
    "/files/base/layout/js/_theme/theme.js",
    "/files/base/layout/js/run.js",
];

let finalPromise = [];

themeScripts.forEach(function (url) {
    finalPromise.push(loadScript(url));
});