#!/usr/bin/env node

var optimist = require('optimist')
    .usage('Precompile handlebar templates.\nUsage: $0 [template|directory]...', {
      'f': {
        'type': 'string',
        'description': 'Output File',
        'alias': 'output'
      },
      'map': {
        'type': 'string',
        'description': 'Source Map File'
      },
      'a': {
        'type': 'boolean',
        'description': 'Exports amd style (require.js)',
        'alias': 'amd'
      },
      'c': {
        'type': 'string',
        'description': 'Exports CommonJS style, path to Handlebars module',
        'alias': 'commonjs',
        'default': null
      },
      'h': {
        'type': 'string',
        'description': 'Path to handlebar.js (only valid for amd-style)',
        'alias': 'handlebarPath',
        'default': ''
      },
      'k': {
        'type': 'string',
        'description': 'Known helpers',
        'alias': 'known'
      },
      'o': {
        'type': 'boolean',
        'description': 'Known helpers only',
        'alias': 'knownOnly'
      },
      'm': {
        'type': 'boolean',
        'description': 'Minimize output',
        'alias': 'min'
      },
      'n': {
        'type': 'string',
        'description': 'Template namespace',
        'alias': 'namespace',
        'default': 'Handlebars.templates'
      },
      's': {
        'type': 'boolean',
        'description': 'Output template function only.',
        'alias': 'simple'
      },
      'N': {
        'type': 'string',
        'description': 'Name of passed string templates. Optional if running in a simple mode. Required when operating on multiple templates.',
        'alias': 'name'
      },
      'i': {
        'type': 'string',
        'description': 'Generates a template from the passed CLI argument.\n"-" is treated as a special value and causes stdin to be read for the template value.',
        'alias': 'string'
      },
      'r': {
        'type': 'string',
        'description': 'Template root. Base value that will be stripped from template names.',
        'alias': 'root'
      },
      'p': {
        'type': 'boolean',
        'description': 'Compiling a partial template',
        'alias': 'partial'
      },
      'd': {
        'type': 'boolean',
        'description': 'Include data when compiling',
        'alias': 'data'
      },
      'e': {
        'type': 'string',
        'description': 'Template extension.',
        'alias': 'extension',
        'default': 'handlebars'
      },
      'b': {
        'type': 'boolean',
        'description': 'Removes the BOM (Byte Order Mark) from the beginning of the templates.',
        'alias': 'bom'
      },
      'v': {
        'type': 'boolean',
        'description': 'Prints the current compiler version',
        'alias': 'version'
      },

      'help': {
        'type': 'boolean',
        'description': 'Outputs this message'
      }
    })

    .wrap(120)
    .check(function(argv) {
      if (argv.version) {
        return;
      }
    });


var argv = optimist.argv;
argv.files = argv._;
delete argv._;

var Precompiler = require('../dist/cjs/precompiler');
Precompiler.loadTemplates(argv, function(err, opts) {
  if (err) {
    throw err;
  }

  if (opts.help || (!opts.templates.length && !opts.version)) {
    optimist.showHelp();
  } else {
    Precompiler.cli(opts);
  }
});
