/**
 * Have butlerbot insult another member of the discord channel on your behalf.
 * @module insult
 * @return {Object} - string (as a message to discord text channel)
 */
const axios = require('axios');
module.exports = {
	name: 'insult',
    description: 'Insult your target.',
    aliases: ['burn'],
    usage: '@recipient',
    args: true,
    cooldown: 1,
    /**
     * @method execute
     * @param {string} message - command, used to determine which channel to return results
     * @param {string} args - recipient of insult message sent to channel; required
     * @return {string} selected insult with correct formatting and recipient
     */  
    execute(message,args) {   
      /** @var {string} insultApi */  
      let insultApi = 'https://evilinsult.com/generate_insult.php?lang=en&type=json';

      /** 
       * @function getApology
       * @async
       * @return {Object} insult
       * @summary selection of random insult from api call
       */       
      function insultMessage(api) {
        // to make it look like butlerbot is thinking about it
        message.channel.startTyping();
        // grab an insult from this api
        axios.get(api)
          .then(response => {
            // append our target to the insult
            let res = response.data.insult.replace(/"/g, '\\"').replace(/&/g, '\\&\\').replace(/>/g, '\\>\\');
            message.channel.send(args[0].concat(', ', res));
        })
        .then(message.channel.stopTyping(true))
        .catch(error => {
          console.log(error);
          return message.channel.send(`I am unable to pity the fool, sorry master ${message.author}`);
        }); 
      }
      // grab the insult and return the results
      insultMessage(insultApi);
    }
};