#!/usr/bin/perl
use FindBin;
use File::Spec;
use lib File::Spec->catdir($FindBin::Bin, '..', 'lib');

use Moose::Util qw(apply_all_roles);
use Getopt::Std;
 
my %options=();
getopts("wnphmHc:", \%options);
help if $options{h};

my $my_app = $options{c} || 'My::App';

if ($options{c}) {
	eval <<LOAD;
use $my_app;
apply_all_roles($my_app, "WWW::SwaggerClient::Role::AutoDoc");
LOAD
	die $@ if $@;
}
else {
	package My::App;
	use Moose;
	with ('WWW::SwaggerClient::Role', 'WWW::SwaggerClient::Role::AutoDoc');
}

package main;

my $opt;
$opt = 'wide' if $options{w};
$opt = 'narrow' if $options{n};

$opt = 'pod' if $options{p};
$opt = 'pod' if $options{H};
$opt = 'pod' if $options{m};

$opt ||= 'wide';

my $api = $my_app->new;

if ($options{H}) {
	my $pod2html = "pod2html --backlink --css http://st.pimg.net/tucs/style.css?3";
	open STDOUT, "| $pod2html" or die "Can't fork: $!";
	$api->autodoc($opt);
	close STDOUT or die "Can't close: $!";
}
elsif ($options{m}) {
	my $pod2markdown = "pod2markdown --html-encode-chars 1";
	open STDOUT, "| $pod2markdown" or die "Can't fork: $!";
	$api->autodoc($opt);
	close STDOUT or die "Can't close: $!";
}
else {
	$api->autodoc($opt);
}

exit(0);

# --------------------
sub help {
	print <<HELP;
Usage: autodoc [OPTION] [-c My::App::Class]

  -w           wide format (default)
  -n           narrow format
  -p           POD format 
  -H           HTML format 
  -m           Markdown format
  -h           print this help message
  -c           your application class

HELP

	exit(0);
}

