require("express-async-errors");
const express = require('express');
const router = express.Router();
const fs = require('fs');
const config = require('../../config');
const path = require('path');
const authMiddleWare = require('./middleware/Auth');
const currentVersion = config.current_version;

if (currentVersion.length > 0) {

    let i = 0;

    do {

        const direntPath = path.join(__dirname, `../api2/${currentVersion[i]}/`);

        const directories = fs.readdirSync(direntPath, { withFileTypes: true }).filter(
            dirent => dirent.isDirectory()
        ).map(dirent => dirent.name);

        var module_found = 0;

        for (var j = 0; j < directories.length; j++) {

            if (directories[j].indexOf(config.registeredFolderName) > -1) {

                module_found++;

                let dirname = direntPath + directories[j];

                let files = fs.readdirSync(dirname, { withFileTypes: true }).filter(dirent => dirent.isFile()).map(dirent => dirent.name);

                if (files.indexOf(config.routingFileName) > -1) {

                    // dynamic route here

                    const fileDirect = path.join(dirname, files[files.indexOf(config.routingFileName)]);

                    const dynamicFiles = require(fileDirect);

                    const endPointGroup = directories[j].replace(config.registeredFolderName, '');

                    if (typeof dynamicFiles == 'function') {

                        exposerouter(endPointGroup, dynamicFiles, currentVersion[i]);

                    }

                }

            }
            else {

                module_found = 0;

            }

        }

        if (module_found == 0) {

            console.log("System did not find any module to load");
            process.exit(1);

        }

        i++;
    } while (i < currentVersion.length);

    router.use(authMiddleWare.errorHandler);
}
else {

    console.log("System did not find any version to run");
    //console.log("No file or folder found for routing");
    process.exit(1);

}

function exposerouter(endPointGroup, dynamicFiles, current_version) {

    if (endPointGroup == "Auth") {

        router.use(`/${current_version}/` + endPointGroup, dynamicFiles);



    }
    else {

        if (config.apply_auth == false) {

            router.use(`/${current_version}/` + endPointGroup, dynamicFiles);

        }
        else {

            router.use(`/${current_version}/` + endPointGroup, authMiddleWare.checkToken, dynamicFiles);

        }

    }

};

module.exports = router;


