#!/usr/bin/env node

var program = require('commander')
  , read = require('node-readability')
  , he = require('he')
  , pkg = require('../package.json')
  , clc = require('cli-color');



program
  .version(pkg.version)
  .option('-c, --color', 'use colors in terminal')
  .option('-f, --format [format]', 'set the format for the result (text or html)', '')
  .parse(process.argv);

var styles = {};
styles.h1 = styles.h2 = styles.muted = function(s) { return s; };

if(program.color) {
  styles.h1 = clc.underline.bold;
  styles.h2 = clc.bold;
  styles.muted = clc.white;
  console.log(clc.reset);
}

var error = function(msg) {
  if(msg) console.log(clc.red("Error: ")+msg);
  console.log();
  usage();
  process.exit(0);
}

var usage = function() {
  console.log("Usage: readability [url]");
  console.log();
  console.log("E.g.: readability http://techcrunch.com/2014/02/12/marc-andreessen-tech-is-still-recovering-from-a-depression");
  console.log();
}


if(process.argv.length < 2) return error();
var url = process.argv[2];

if(typeof url!='string' || !url.match(/^https?:\/\//)) return error(url+" is an invalid url");

console.log(url);
read(url, function(err, article, meta) {
  // The title of the page.
  console.log();
  console.log(styles.h1(article.title));
  console.log();
  // The main body of the page.
  // console.log(article.content);
  var content = article.content;

  if(program.format == 'html') return console.log(content);

  content = content.replace(/<h[2-9]>([^<])+<\/h[2-9]>/gi, function(match, header) {
    return styles.h2(match);
  });

  content = content.replace(/ {2,*}|\t/g,' ');

  var content = content.replace(/<\/?[^>]+(>|$)/g, "");
  content = he.decode(content);
  console.log(content);

  // The raw HTML code of the page
  //console.log(article.html);
  // The document object of the page
  //console.log(article.document);

});
