{join} = require 'path'
fs = require 'fs'

http = require 'http'
https = require 'https'

read = (file) -> fs.readFileSync file, 'utf8'

config =
  port: 4000
  ssl: false

module.exports = (port, app, done) ->
  app ?= ->
  done ?= ->

  if config.ssl

    # read cert files
    ca = config.ssl.ca || []
    options =
      key: read config.ssl.key
      cert: read config.ssl.cert
      ca: ca.map read

    # create server with ssl
    server = https.createServer(options, app).listen port, done

    #http server to redirect to https
    if (port is config.port) and config.ssl.redirectFrom?
      redirect = (req, res) ->
        redirectTarget = "https://#{req.headers.host}#{req.url}"
        res.writeHead 301, {
          "Location": redirectTarget
        }
        res.end()
      redirectServer = http.createServer(redirect).listen config.ssl.redirectFrom

    return server

  else
    http.createServer(app).listen port, done
