var lunr = require(“lunr”),

metadataParser = require("markdown-yaml-metadata-parser"),
path = require("path"),
fs = require("fs"),
stdout = process.stdout,
properties = ["tags", "questions", "objectives", "key_points"];

function findResources(startPath) {

if (!fs.existsSync(startPath)) {
        return;
}
var resources = [];

var files = fs.readdirSync(startPath);
for (var i = 0; i < files.length; i++) {
        var filename = path.join(startPath, files[i]);
        var stat = fs.lstatSync(filename);
        if (stat.isDirectory()) {
                findResources(filename).forEach(x => {
                        resources.push(x);
                });
        } else {
                if(filename.indexOf('.') != 0 && filename.indexOf('_site') != 0 && !stat.isSymbolicLink()){
                        resources.push(filename);
                }
        }
}

return resources;

}

var resources = findResources('.'); tutorials = resources.filter(x => x.indexOf('topics/') == 0).filter(x => x.endsWith('tutorial.md')) faqs = resources.filter(x => x.indexOf('faqs/') > 0 ).filter(x => x.endsWith('.md'))

tutorials = tutorials.map(tuto => {

const contents = fs.readFileSync(tuto, "utf8");
const result = metadataParser(contents);
result.metadata.id = tuto;
result.metadata.content = result.content;
filtered = result.content.split('\n')
        .filter(x => x[0] !== '>') // Remove boxes
        .filter(x => x[0] !== '{') // remove closing tag
        .filter(x => x != '') // don't index whitespace
        //.slice(0, 25) // first 25 lines
        .join('\n')

output = {
        id: tuto,
        type: "tutorial",
        title: result.metadata.title,
        content: filtered,
        contributors: (result.metadata.contributors || []).join(" "),
        meta: "",
};

// Array style properties
properties.forEach(prop => {
        if (Array.isArray(result.metadata[prop])) {
                output['meta'] += result.metadata[prop].join(" ") + "\n";
        }
});
return output;

});

faqs = faqs.map(faqPath => {

const contents = fs.readFileSync(faqPath, "utf8");
const result = metadataParser(contents);
return [result, faqPath];

}).filter(x => {

return x[0].metadata.layout === 'faq'

}).map(faqdata => {

result = faqdata[0];

output = {
        id: faqdata[1],
        type: "faq",
        title: result.metadata.title,
        content: result.content,
        contributors: (result.metadata.contributors || []).join(" "),
        meta: "",
};

// Array style properties
properties.forEach(prop => {
        if (Array.isArray(result.metadata[prop])) {
                output['meta'] += result.metadata[prop].join(" ") + "\n";
        }
});
return output;

});

var idx = lunr(function() {

this.ref("id");
this.field("title");
this.field("meta");
this.field("contributors");
this.field("content");

tutorials.forEach(function(doc) {
        this.add(doc);
}, this);

faqs.forEach(function(doc) {
        this.add(doc);
}, this);

});

stdout.write(JSON.stringify(idx));