#!/usr/bin/perl -w

use strict;

use Cwd 'abs_path';
use File::Basename;
use Getopt::Long;

use Tools;

use Paths::CSS;
use Paths::XSL;
use Paths::JS;

main();

sub main {
    my $params = getParams();

    my $mode = $params->{mode};

    if ($mode eq 'iecss')  { doIECSS($params); }
    elsif ($mode eq 'css') { doCSS($params); }
    elsif ($mode eq 'xsl') { doXSL($params); }
    elsif ($mode eq 'js')  { doJS($params); }
    elsif ($mode eq 'all') {
        doIECSS($params);
        doCSS($params);
        doXSL($params);
        doJS($params);
    }
}

###############################################################################

sub doCSS {
    my ($params) = @_;

    $params->{mode} = "css";
    $params->{suffix} = ".css";
    my $p = new Paths::CSS($params);
    $p->do();
}

sub doIECSS {
    my ($params) = @_;

    $params->{mode} = "css";
    $params->{suffix} = ".ie.css";
    my $p = new Paths::CSS($params);
    $p->do();
}

sub doXSL {
    my ($params) = @_;

    $params->{mode} = "xsl";
    $params->{suffix} = ".xsl";
    my $p = new Paths::XSL($params);
    $p->do();
}

sub doJS {
    my ($params) = @_;

    $params->{mode} = "js";
    $params->{suffix} = ".js";
    my $p = new Paths::JS($params);
    $p->do();
}

###############################################################################

sub getParams {

    my ($input, $output, $paths, $mode);
    GetOptions( 'input=s'  => \$input, 'output=s' => \$output, 'paths=s' => \$paths );

    if (!$input) { die usage(); }
    if (!(-e $input)) { die "ERROR: Cannot open $input\n"; }

    if (!$output) { $output = $input; }
    if (-d $output) {
        $output =~ s{/$}{};
        $output = "$output/$input";
    }
    $mode = getMode($output);
    $output = removeExt($output);

    return {
        input => $input,
        output => $output,
        paths => $paths,
        mode => $mode
    };
}

###############################################################################

sub usage {
    return <<USAGE;
USAGE:
    > paths --input page.xml

    > paths --input page.xml --output dir
    > paths --input page.xml --output dir/page

    > paths --input page.xml --output page.css
    > paths --input page.xml --output page.ie.css
    > paths --input page.xml --output page.xsl
USAGE
}

###############################################################################

sub removeExt {
    my ($name) = @_;
    $name =~ s/\.(xml|xsl|ie\.css|css|js)$//;
    return $name;
}

sub getMode {
    my ($name) = @_;

    if ($name =~ /\.xsl$/) { return 'xsl'; }
    if ($name =~ /\.ie\.css$/) { return 'iecss'; }
    if ($name =~ /\.css$/) { return 'css'; }
    if ($name =~ /\.js$/) { return 'js'; }

    return 'all';
}

###############################################################################

