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

const templateFolder = path.resolve('tools', 'doc', 'yamlTemplates');
const outputFolder = path.resolve('docs', 'sourceinfo');

if (process.argv.length < 3) {
    console.log('Error: Source filename required');
    process.exit();
}

console.log(`Processing ${process.argv[2]}`);

if (!fs.existsSync(outputFolder)) {
    fs.mkdirSync(outputFolder);
}

const docData = JSON.parse(fs.readFileSync(path.resolve(process.argv[2]), 'utf8'));
const tempFilename = path.resolve(templateFolder, 'template.ejs');
const tempSource = fs.readFileSync(tempFilename, 'utf8');
const template = ejs.compile(tempSource, {
    filename: tempFilename,
    cache: true
});

searchItemsRecursively(docData);

function searchItemsRecursively(item) {
    if (interestedIn(item.kind)) {
        processItem(item);
    } else if (item.children) {
        item.children.forEach((child) => {
            searchItemsRecursively(child);
        });
    }
}

function interestedIn(itemKind) {
    return itemKind === 128 || itemKind === 256 || itemKind === 4194304;
}

function processItem(item) {
    const docText = template(item);

    if (item.name === 'Widget') {
        console.log('item ' + JSON.stringify(item.name));
    }

    fs.writeFileSync(path.resolve(outputFolder, item.name + '.yml'), docText);
}