#!/usr/bin/env coffee
#
# Crafting Guide - serve-build
#
# Copyright (c) 2014-2015 by Redwood Labs
# All rights reserved.
#

express = require 'express'
fs      = require 'fs'
path    = require 'path'

########################################################################################################################

ROOT      = './dist/'
DATA_ROOT = '../crafting-guide-data'

CONTENT_TYPE = {
    '.cg':   'text/plain'
    '.css':  'text/css'
    '.html': 'text/html'
    '.js':   'text/javascript'
    '.json': 'application/json'
    '.map':  'application/json'
    '.png':  'image/png'
    '.ttf':  'application/octet-stream'
    '.scss': 'text/css'
}

########################################################################################################################

app = express()

serveIndex = (request, response)->
    response.set 'Content-Type', 'text/html'
    filePath = "#{request.path}index.html".replace /^\//, ''
    fs.stat "#{ROOT}#{filePath}", (err, stats)->
        if not err?
            response.sendFile filePath, root:ROOT
            console.log ">>> #{filePath} (for #{request.path})"
        else
            response.sendFile '/app.html', root:ROOT
            console.log ">>> app.html (for #{request.path})"

serveData = (request, response)->
    console.log ">>> #{request.path}"
    response.set 'Content-Type', CONTENT_TYPE[path.extname request.path]
    response.sendFile request.path, root:DATA_ROOT

app.get '/data/*', serveData

app.get '/craft/*', serveIndex
app.get '/login', serveIndex
app.get '*/$', serveIndex

app.get '*', (request, response)->
    console.log ">>> #{request.path}"
    response.set 'Content-Type', CONTENT_TYPE[path.extname request.path]
    response.sendFile request.path, root:ROOT

server = app.listen 8000, '127.0.0.1', ->
    console.log "listening at: #{server.address().address}:#{server.address().port}"
