#!/usr/bin/env coffee

optparse = require 'optparse'
util     = require 'util'

parser = new optparse.OptionParser [
  ['-h', '--help', 'show help']
  ['--list', 'list devices']
  ['--term [DEVICE_NAME]', 'BLE terminal mode']
]

unless process.argv[2]
  process.argv[2] = '--help'

parser.on 'help', ->
  package_json = require "#{__dirname}/../package.json"

  parser.banner = """
  #{package_json.name} v#{package_json.version}

  Usage:
    % #{package_json.name} --list
    % #{package_json.name} --term BlendMicro
  """

  console.log parser.toString()
  process.exit 0


parser.on 'list', ->
  console.log 'scanning devices..'

  noble = require 'noble'
  noble.on 'discover', (peripheral) ->
    console.log peripheral.advertisement.localName
    console.log "  UUID\t#{peripheral.uuid}"
    for k,v of peripheral.advertisement
      console.log "  #{k}\t#{util.inspect v}"

  noble.on 'stateChange', (state) ->
    if state is 'poweredOn'
      noble.startScanning()
    else
      noble.stopScanning()



parser.on 'term', (opt, device_name) ->
  unless device_name
    console.log "missing device name"
    return

  BlendMicro = require "#{__dirname}/../"
  bm = new BlendMicro device_name
  encoding = 'utf8'

  bm.on 'open', ->
    console.log "<open #{device_name}>"

  bm.on 'data', (data) ->
    console.log data.toString(encoding)

  bm.on 'close', ->
    console.log "<close #{device_name}>"

  process.stdin.setEncoding encoding

  process.stdin.on 'readable', ->
    chunk = process.stdin.read()
    if chunk is null
      return
    line = chunk.toString().replace /[\r\n]/g, ''
    bm.write line

parser.parse process.argv

