#!/usr/bin/env node

'use strict';

var Lock = require('./lib/lock');
var noble = require('noble');

var argv = require('yargs')
  .usage('Control an August Smart Lock.\nUsage: $0 [command]')
  .example('$0 lock', 'closes the lock')
  .example('$0 unlock', 'opens the lock')
  .check(function(argv) {
    if (argv._.length !== 1) {
      return 'must specify an operation to perform';
    }

    var op = argv._[0];
    if (typeof Lock.prototype[op] !== 'function') {
      return 'invalid operation: ' + op;
    }
  })
  .argv;

var config = require(process.env.AUGUSTCTL_CONFIG || './config.json');

noble.on('stateChange', function(state) {
  if (state === 'poweredOn') {
    noble.startScanning([ Lock.BLE_COMMAND_SERVICE ]);
  } else {
    noble.stopScanning();
  }
});

noble.on('discover', function(peripheral) {
  if (config.uuid === undefined || peripheral.uuid === config.uuid) {
    noble.stopScanning();

    peripheral.on('disconnect', function() {
      process.exit(0);
    });

    var lock = new Lock(
      peripheral,
      config.offlineKey,
      config.offlineKeyOffset
    );
    lock.connect().then(function() {
      var op = argv._[0];
      return lock[op]();
    }).finally(function() {
      return lock.disconnect();
    });
  }
});