#!/bin/sh
":" // a shebang hack; exec /usr/bin/env node --harmony-async-await "$0" "$@"

'use strict'

const os = require('os')
const yargs = require('yargs')
const uploadServer = require('../lib/upload-server')

const argv = yargs
      .usage('Usage: $0 [options]')
      .alias('h', 'host')
      .nargs('h', 1)
      .default('h', '0.0.0.0')
      .describe('h', 'host to listen')

      .alias('p', 'port')
      .nargs('p', 1)
      .default('p', 5000)
      .describe('p', 'port to listen')

      .alias('d', 'dir')
      .nargs('d', 1)
      .default('d', './')
      .describe('d', 'directory to upload')

      .help()
      .argv

const { h: host, p: port, d: dir } = argv
const addr = `${host}:${port}`
const server = uploadServer(dir)
const ifaces = os.networkInterfaces()

server.listen(port, host, () => {
  console.log(`Available on:`)
  Object.keys(ifaces).forEach(i => {
    const iface = ifaces[i]
    iface.map(detail => {
      const { family, address } = detail
      if (family === 'IPv4') {
        console.log(`  http://${address}:${port}`)
      }
    })
  })
  console.log('Hit CTRL-C to stop the server')
})

process.on('uncaughtException', (err) => {
  if (err.errno === 'EADDRINUSE') {
    console.error(`${addr} is in use.`)
  } else {
    console.error(err)
  }

  process.exit(1)
})
