Imap = require("imap")
path = require("path")
fs = require("fs")
mkdirp = require("mkdirp").sync
child_process = require("child_process")
inspect = require("util").inspect
imap = new Imap(
  user: process.env.GRABBED_USER
  password: process.env.GRABBED_PW
  host: "imap.gmail.com"
  port: 993
  tls: true
  tlsOptions:
    rejectUnauthorized: false
)
process.on "uncaughtException",(err) ->
  console.log err.message
  imap.end()
messagesPath = path.join(process.cwd(),"/messages/")
parsedPath = path.join(process.cwd(),'done')
messages = []

openInbox = (cb) ->
  imap.openBox "[Gmail]/cctv_shots", false, cb

fetchMessages = (callback) ->
  cb = callback
  imap.search ["UNSEEN", ["SINCE", "May 20, 2010"]], (err, results) ->
    #throw err  if err

    #console.log box
    f = imap.fetch results,
      markSeen:true
      bodies:''
    
    f.on "message", (msg, seqno) ->
      #console.log msg
      console.log "Message #%d", seqno
      prefix = "(#" + seqno + ") "

      msg.on "body", (stream, info) ->
        stream.pipe fs.createWriteStream(path.join(messagesPath,"msg-#{seqno}-body.txt"))
        return

      msg.once "end", ->
        
    f.once "error", (err) ->
      #return cb(new Error(err)) if err?
      #console.log "Fetch error: " + err

    f.once "end", ->
      console.log "Done fetching all messages!"
      console.log "Starting parser!"
      console.log "cwd: #{process.cwd()}"
      cb(null)

imap.once "ready", ->
  mkdirp(messagesPath)
  openInbox (err, box) ->
    #throw err if err?
    
    fetchMessages (err) ->
      if err?
        console.log err.message
      else
        console.log "Fetched messages"
      imap.end()

imap.once "error", (err) ->
  #throw err if err?

imap.once "end", ->
  console.log "Connection ended"
  cp = child_process.fork(path.join(process.cwd(),'lib/parser.js'))

  cp.on "exit", ->
    process.exit()

imap.connect()