#!/usr/bin/env node
var yargs = require('yargs');
var fs = require('fs');
var path = require('path');
var stdin = process.stdin;
var argv = yargs.argv;
var assign = require('object-assign');

yargs
.describe('file', 'A CSS file')
.describe('threshold', 'Threshold of allowable color difference')
.describe('allow-equivalent-notation', 'Allow equivalent notation of the same color, e.g. #000 and #000000')
.describe('options', 'An optional JSON file containing all options (Overrides `--threshold`)')
.usage('Usage: colorguard --file [style.css] ');

process.title = 'colorguard';

var colorguard = require('..');
var css = [];
var options = {};

if (argv.file) {
  run(fs.readFileSync(path.resolve(process.cwd(), argv.file), 'utf8'));
}
else {
  stdin.setEncoding('utf8');

  if (process.stdin.isTTY) {
    yargs.showHelp();
  }
  else {
    stdin.on('data', function(chunk) {
      css.push(chunk);
    });

    stdin.on('end', function() {
      css = css.join();
      run(css);
    });
  }
}

function run (css) {
  if (argv.options) {
    options = JSON.parse(fs.readFileSync(path.resolve(process.cwd(), argv.options), 'utf8'));
  }
  else {
    if (argv.threshold) {
      options.threshold = argv.threshold;
    }
    options.allowEquivalentNotation = argv.allowEquivalentNotation;
  }
  if (argv.file) {
    options = assign({
      from: argv.file
    }, options);
  }
  colorguard.process(css, options).then(function (result) {
    if (result.warnings().length) {
      process.exit(1);
    }
  });
}
