const _ = require('underscore'); const nlp = require('compromise'); const lib = require('lib');

/**

*/ module.exports = async (sentence = “”, context) => {

let sentenceTerms = nlp(sentence).out('terms');

let sentenceDict = {
  before: "",
  blackedOutWord: undefined,
  after: ""
};

sentenceTerms = _.filter(sentenceTerms, (term) => {
  return term.normal !== "";
});

var nounIndices = [];
for(i = 0; i < sentenceTerms.length; i++) {
          let term = sentenceTerms[i];
          let isNoun = _.includes(term.tags, 'Noun');
          let isLongerThan2Chars = term.normal.length > 2;

          if(isNoun && isLongerThan2Chars) {
                  nounIndices.push(i);
          }
}

console.log(nounIndices);

let blackedOutIndex = _.sample(nounIndices);

console.log(blackedOutIndex);

_.each(sentenceTerms, (term, index)=> {   
  if(index < blackedOutIndex) {
    sentenceDict.before += term.text;

    if(index !== (blackedOutIndex - 1)) {
      sentenceDict.before += " ";
    }
  } else if(index > blackedOutIndex) {
    sentenceDict.after += term.text;

    if((sentenceTerms.length - 1) !== index) {
      sentenceDict.after += " ";
    }
  } else if(index === blackedOutIndex) {
    var termText = term.text;

    let specialCharsCharacterClass = '[,\\.\\?!()\\-\\–\/"\\s;:*]';
    let nonWordCharsRegex = new RegExp(`^(${specialCharsCharacterClass}*)(.+?)(${specialCharsCharacterClass}*)$`);
    let matchResult = nonWordCharsRegex.exec(termText);

    sentenceDict.termNormal = term.normal;
    sentenceDict.tags = term.tags;
    sentenceDict.before += matchResult[1];
    sentenceDict.blackedOutWord = matchResult[2];
    sentenceDict.after += matchResult[3];
  }
});

return sentenceDict;

};

function getRandomInt(min, max) {

return Math.floor(Math.random() * (max - min + 1)) + min;

}