var fs = require("fs");
var path = require("path");
var ejs = require("ejs");


var templateFolder = path.resolve("tools", "doc", "yamlTemplates");
var 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);
}

var docData = JSON.parse(fs.readFileSync(path.resolve(process.argv[2]), "utf8"));
var tempFilename = path.resolve(templateFolder, "template.ejs");
var tempSource = fs.readFileSync(tempFilename, "utf8");
var 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) {
    //console.log(`Generating ${item.name}`);
    var docText = template(item);
    fs.writeFileSync(path.resolve(outputFolder, item.name + ".yml"), docText); 
}