const fs = require('fs');
const path = require('path');

const angFilenameRegex = /([a-zA-Z0-9\-]+)\.((component)|(dialog)|(directive)|(model)|(pipe)|(service)|(widget))\.ts/;
const searchFolderOmitRegex = /(config)|(mock)|(i18n)|(assets)|(styles)/;

//  Search source folders for .ts files to discover all components, directives, etc.
function searchLibraryRecursive(srcData, folderPath) {
    const items = fs.readdirSync(folderPath);

    for (let i = 0; i < items.length; i++) {
        const itemPath = path.resolve(folderPath, items[i]);
        const info = fs.statSync(itemPath);

        if (info.isFile() && items[i].match(angFilenameRegex)) {
            const nameNoSuffix = path.basename(items[i], '.ts');

            let displayPath = itemPath.replace(/\\/g, '/');
            displayPath = displayPath.substring(displayPath.indexOf('lib') + 4);

            // Type == "component", "directive", etc.
            const itemType = nameNoSuffix.split('.')[1];

            srcData[nameNoSuffix] = { path: displayPath, type: itemType };
        } else if (info.isDirectory() && !items[i].match(searchFolderOmitRegex)) {
            searchLibraryRecursive(srcData, itemPath);
        }
    }
}

module.exports = searchLibraryRecursive;