


############################################################################################################
# ERROR                     = require 'coffeenode-stacktrace'
# njs_util                  = require 'util'
njs_path                  = require 'path'
# njs_fs                    = require 'fs'
#...........................................................................................................
TYPES                     = require 'coffeenode-types'
TRM                       = require 'coffeenode-trm'
rpr                       = TRM.rpr.bind TRM
badge                     = 'using-connect'
log                       = TRM.get_logger 'plain', badge
info                      = TRM.get_logger 'info',  badge
whisper                   = TRM.get_logger 'whisper',  badge
alert                     = TRM.get_logger 'alert', badge
debug                     = TRM.get_logger 'debug', badge
warn                      = TRM.get_logger 'warn',  badge
help                      = TRM.get_logger 'help',  badge
echo                      = TRM.echo.bind TRM
# rainbow                   = TRM.rainbow.bind TRM
# suspend                   = require 'coffeenode-suspend'
# step                      = suspend.step
# after                     = suspend.after
# eventually                = suspend.eventually
# immediately               = suspend.immediately
# every                     = suspend.every
# TEXT                      = require 'coffeenode-text'
#...........................................................................................................
### https://github.com/goodeggs/teacup ###
teacup                    = require 'teacup'
#...........................................................................................................
templates                 = require './templates'
connect                   = require 'connect'
authom                    = require 'authom'


TRM.dir authom

#-----------------------------------------------------------------------------------------------------------
write_ok_html_header = ( request, response ) ->
  status_code = 200
  #.........................................................................................................
  headers =
    'Content-Type':         'text/html'
    'Connection':           'keep-alive'
    'Transfer-Encoding':    'chunked'
  #.........................................................................................................
  return response.writeHead status_code, headers

#-----------------------------------------------------------------------------------------------------------
respond = ( request, response, next ) ->
  write_ok_html_header request, response
  response.write """<link rel='shortcut icon' href='/public/favicon.ico?v=#{1 * new Date()}'>"""
  response.write "<div>RQ##{request_count}</div>"
  response.end "<div>hello world</div>"

#-----------------------------------------------------------------------------------------------------------
request_counter_middleware = ( request, response, next ) ->
  request[ 'count' ] = ( request_count += 1 )
  next()

#-----------------------------------------------------------------------------------------------------------
request_count = 0

#-----------------------------------------------------------------------------------------------------------
login = ( user, password, handler ) ->
  debug "authenticating #{user}:#{password}"
  handler null, true

#-----------------------------------------------------------------------------------------------------------
server_options =
  'host':         '127.0.0.1'
  'port':         3000

#-----------------------------------------------------------------------------------------------------------
connect_options =
  'logger':
    'format': 'short'     # ':remote-addr - :method :url HTTP/:http-version :status :res[content-length] - :response-time ms'
    'format': 'tiny'      # ':method :url :status :res[content-length] - :response-time ms'
    'format': 'default'   # ':remote-addr - - [:date] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent"'
    'format': 'mingkwai'  # own format
    'format': 'dev'       # concise output colored by response status for development use

# possible to define logger format:
connect.logger.format 'mingkwai', ':method :url :status :res[content-length] - :response-time ms'

#-----------------------------------------------------------------------------------------------------------
app = connect()
app.use request_counter_middleware
app.use connect.logger connect_options[ 'logger' ][ 'format' ]

# app.use connect.basicAuth login


### https://github.com/wdavidw/node-connect-coffee-script ###

### http://learnboost.github.io/stylus/docs/middleware.html ###
# stylus.middleware(options)
# Options

# Return Connect middleware with the given options.

#   `serve`     Serve the stylus files from `dest` [true]
#   `force`     Always re-compile
#   `src`       Source directory used to find .styl files
#   `dest`      Destination directory used to output .css files
#               when undefined defaults to `src`.
#   `compile`   Custom compile function, accepting the arguments
#               `(str, path)`.
#   `compress`  Whether the output .css files should be compressed
#   `firebug`   Emits debug infos in the generated css that can
#               be used by the FireStylus Firebug plugin
#   `linenos`   Emits comments in the generated css indicating
#               the corresponding stylus line


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

# create servers for the services you'll be using
# authom.createServer {} # facebook credentials
# authom.createServer {} # github credentials
# authom.createServer {} # google credentials
# authom.createServer {} # twitter credentials
# ... et cetera

service_credential_records = [
  service:  "github"
  id:       "7e38d12b740a339b2d31"
  secret:   "116e41bd4cd160b7fae2fe8cc79c136a884928c3"
  ]

for service_credentials in service_credential_records
  authom.createServer service_credentials


# called when a user is authenticated on any service
authom.on 'auth', ( request, response, data ) ->
  debug 'auth', data

# called when an error occurs during authentication
authom.on 'error', ( request, response, data ) ->
  debug 'error', data

# TRM.dir app
app.use '/auth/:service', authom.app

############################################################################################################
# TEST MIDDLEWARE (see http://howtonode.org/connect-it)

test_middleware = ->
  debug "setting up test_middleware"
  return ( request, response, next ) ->
    # TRM.dir 'test request', request
    # TRM.dir 'test response', response
    debug 'test'
    write_ok_html_header request, response
    response.write 'just a test'
    response.end()
    # next()

# Calling the handler gives us a place to handle startup matters:
app.use '/test', test_middleware()



############################################################################################################
app.use '/public', connect.static njs_path.join __dirname, 'public'
# app.use connect.static 'public'
app.use respond
app.listen server_options[ 'port' ]
log TRM.green "listening to #{server_options[ 'host' ]}:#{server_options[ 'port' ]}"







