kue =  require 'kue'
conf = require './config'
Mold = require './lib/master'
Worker = require './lib/worker'
util = require './lib/util'
racer = require 'racer'
shareDbMongo = require 'sharedb-mongo'
require('./collections')(racer)

backend = racer.createBackend
  db: shareDbMongo 'mongodb://localhost:27017/marina'

model = backend.createModel()
queue = kue.createQueue
  redis:
    redisClientFactory: ->
      return require('redis').createClient()

# gracefully kill jobs on uncaught exception
process.once 'uncaughtException', (err) ->
  throw err
  queue.shutdown 1000, (err2) ->
    console.error 'Kue shutdown result: ', err or 'OK'
    process.exit 0
    return
  return

if conf.get('isMaster')
  # job management UI
  console.log 'Kue Admin UI Listening on port', port
  port = conf.get('kuePort') || 3333
  kue.app.listen port
  console.log 'Starting mould master'
  module.exports = mold = new Mold model, queue
  console.log 'Created mold', mold.kue.name, mold.kue.id
  # Now lets try some things. Fire off a basic build
  mold.build 'lever/admin2', 'move-docs-to-dev-portal', {}
else
  console.log 'Starting mould worker'
  module.exports = worker = new Worker model, queue


