# Description:
#   si collega al sito della scuola e legge le circolari
#
# Dependencies:
#   "cheerio": "0.19.0"
# 
# Configuration:
#   None
#
# Commands:
#   hubot mostrami le (ultime (n)) circolari - stampa la lista delle ultime circolari
#   hubot linkami la circolare (numero/n/n°) (n) - linka una circolare precisa
#
# Author:
#   Enrico Fasoli (fazo96)
#

cheerio = require('cheerio')

parseHtml = (htmlData,done) ->
  $ = cheerio.load htmlData
  tab = $('tr').map (i) ->
    # console.log($('td',this).html())
    # console.log($(this,'td').length)
    link = ""; destinatario = ""
    l = $('td',this).map (j) ->
       # console.log($(this).html())
       if $('a',this).get(0)?
         #console.log($('a',this).get(0))
         if $('a',this).get(0).attribs?.href?
           link = 'http://galileicrema.it' + $('a',this).get(0).attribs.href
       item = $(this).text().trim()
       # console.log(i,j,item)
       # console.log(item.length)
       if(j == 5)
         destinatario = item.split('\n\n\t\t\t\t\t')
         # if(destinatario[0] === "Tutti") destinatario = ["ATA","Docenti","Studenti"]
       return item
    l = l.get()
    obj =
      protocollo: l[0],
      mittente: l[1],
      titolo: l[2],
      oggetto: l[3],
      data: l[4],
      destinatario: destinatario,
      link: link
    return obj
  tab = tab.get()
  tab.splice 0, 1
  done null, tab

downloadCircolari = (robot, callback) ->
  robot.http("http://galileicrema.it/Intraitis/comunicazioni/ComVis.asp?PerChi=Tutti")
    .get() (err, res, body) ->
      callback err, body

diffCircolari = (oldObj,newObj) ->
  diff = newObj.length - oldObj.length
  newObj.slice(0,diff)

parseCircolari = (err,data,callback) ->
  if err
    console.log(err)
  else
    parseHtml data, (err,res) -> callback res

module.exports = (robot) ->
  robot.respond /(?:mostrami|dimmi|fammi vedere|quali sono) (?:le(?: ultime)? )?([0-9]+ )?circolari/i, (res) ->
    if res.match[1] is 0 then return
    res.send "sto controllando le circolari..."
    num = 10
    if not isNaN(res.match[1])
      num = parseInt res.match[1]
    downloadCircolari robot, (a,b) ->
      parseCircolari a, b, (x) ->
        list = x.slice 0, (num or 5)
        msg = list.map (c) ->
          ['('+c.protocollo.split('/')[0]+')','('+c.data+')',c.titolo].join(' ')
        res.send msg.join('\n') or 'errore'

  robot.respond /linkami (?:la )?circolare (?:(?:n(?:°)?(?: )?)|numero )?(\d+)/i, (res) ->
    base = "http://galileicrema.it/Intraitis/documenti/comunicazioni/2014/Circolare"
    res.send base+res.match[1]+'.pdf'