# Description:
#   makes dank maymays
#
# Commands:
#   hubot meme <template>,<upper title>,<lower title> - genera un meme
#   hubot memes [-v] - mostra i templates disponibili
#
# Dependencies:
#   "async": "1.4.2"
#
# Configuration:
#   None
#
# Author:
#   Enrico Fasoli (fazo96)

async = require 'async'

module.exports = (robot) ->
  memegen = 'http://memegen.link/'

  usage = 'non si usa così: prova a chiedermi "asjon help meme" per
           sapere sapere come funziona il comando'

  escape = (str) ->
    return '_' unless str.length
    str.replace( /-/g, '--')
       .replace(/\ /g,  '-')
       .replace( /_/g, '__')
       .replace(/\?/g, '~q')
       .replace( /%/g, '~p')
       .toLowerCase()

  gen_meme = (template, title1, title2) ->
    "#{memegen}#{template}/#{escape title1}/#{escape title2}.jpg"

  send_example = (url, res, callback) ->
    cb = if callback? then (-> callback()) else (-> return)

    robot.http(url).get() (err, r, body) ->
      template = JSON.parse body
      title = template.name
      names = template.aliases
      res.send (gen_meme names[0], title, names.join ', '),
               if robot.adapterName is 'tg' then cb else ''
      cb() if robot.adapterName isnt 'tg'

  robot.respond /meme (.+)/i, (res) ->
    args = (i.trim() for i in res.match[1].split ',')
    return res.send usage if args.length != 3

    res.send gen_meme args...

  robot.respond /memes( -v)?/i, (res) ->
    if not res.match[1]?
      res.send 'guarda qui: http://memegen.link/overview'
    else
      robot.http(memegen + 'templates/').get() (err, r, body) ->
        templates = (url for _, url of JSON.parse body)
        async.eachSeries templates, (url, done) ->
          send_example url, res, -> done()