#!/usr/bin/env node
// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

var minimist = require('minimist');
var assert = require('assert');
var myth = require('myth');
var rework = require('rework');
var inherit = require('rework-inherit');
var path = require('path');
var fs = require('fs');
var argv = minimist(process.argv.slice(2));
var infile = argv._[0];

if (! infile) {
  var err = new Error('Missing infile, try `./bin/compile-css <infile>`');
  return exit(err);
}

read(infile, function onstring(err, string) {
  if (err) {
    return exit(err);
  }

  compile(string, function onCSS(err, css){
    if (err) {
      exit(err);
    } else {
      process.stdout.write(css);
    }
  });
});


// # compile-css
//
// This is a quick css pre-processor based on `myth`, once we start to
// standardize the css this should get bundled up into a module.
//
// ## Usage
//
// There is no bin so right now use node to run this:
//
//     node rework-css.js <infile>
//
// This program will spit out the compiled CSS to stdout. Redirect with `>`:
//
//     node rework-css.js stylesheets/index.css > public/bundle.css
//
function compile(string, callback) {
  assert.ok(string, 'Missing string argument');
  assert.ok(callback, 'Missing callback argument');

  var css;
  var err;

  // myth/rework has a sync api that throws :/
  try {
    css = preprocess(string);
  } catch (e) {
    err = e;
  }

  callback(err, css);
}

// wraps the call to rework with all the options and plugins
function preprocess(string) {
  var css = myth(string, {
    compress: true,
    source: infile
  })

  return rework(css)
  .use(inherit())
  .toString();
}

function read(file, callback) {
  file = path.resolve(file);
  fs.readFile(file, 'utf8', callback);
}

function exit(err) {
  if (err) {
    console.error(err.stack);
  }

  process.exit(1);
}
