#!/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 'ie6css') { doIE6CSS($params); }
    elsif ($mode eq 'ie7css') { doIE7CSS($params); }
    elsif ($mode eq 'css') { doCSS($params); }
    elsif ($mode eq 'xsl') { doXSL($params); }
    elsif ($mode eq 'js')  { doJS($params); }
    elsif ($mode eq 'print')  { doPRINT($params); }
    elsif ($mode eq 'all-print')  { 
        doIECSS($params);
        doCSS($params);
        doXSL($params);
        doJS($params);
        doPRINT($params);
    }
    elsif ($mode eq 'convert2xml')  { doCONVERT2XML($params); }
    elsif ($mode eq 'allie' || $mode eq 'ieonlycss') {
        if ($mode eq 'ieonlycss') {
            $params->{ieonlycss} = 1;
        }
        doIECSS($params);
        doIE6CSS($params);
        doIE7CSS($params);
        doCSS($params);
        doXSL($params);
        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 doIE6CSS {
    my ($params) = @_;

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

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

    $params->{mode} = "css";
    $params->{suffix} = ".ie7.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 doPRINT {
    my ($params) = @_;

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

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

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

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

sub getParams {

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

    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";
    }
    if (!$output) { $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|raw\.xml|(ie[67]?|print)\.css|css|js)$//;
    return $name;
}

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

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

    return 'all';
}

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

