#!/usr/bin/perl -w

use strict;

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

BEGIN {
    my (undef, $tools) = fileparse(abs_path($0));
    $tools =~ s{/[^/]*$}{};
    push(@INC, $tools);
}

use Tools;
use File::Find;
use Getopt::Long;

my $paths;
GetOptions( 'paths=s' => \$paths );
if (!$paths) { die usage(); }

my @locales = qw(ru en uk by kz tt az); # первый элемент -- дефолтная локаль

my $dir = shift;

if ($dir && -d $dir) {
    process_dir($dir);
} else {
    find({ wanted => \&process, no_chdir => 1 }, ".");
}

sub process {
    my $dir = $_;

    if (!(-d $dir)) { return; }
    if ($dir =~ /\.svn/) { return; }

    process_dir($dir);
}

sub process_dir {
    my $dir = shift;

    # print STDERR "rebuilding: $dir";

    my $DIR;
    opendir($DIR, "$dir");
    while (my $xml = readdir($DIR)) {
        if (!($xml =~ /\.raw\.xml$/)) { next; }

        my $in = "$dir/$xml";
        my $options = Tools::options($in);

        my $out = $xml;
        $out =~ s/\.raw\.xml$//;

        for my $locale ( ($options->{'need-localization'}) ? @locales : @locales[0,0] ) {
            `xsltproc --xinclude --stringparam locale $locale $Tools::tools/convert2xml.xsl $in | xmllint --format - | $Tools::tools/reformat > $dir/$out.$locale.xml`;
        }
        if (!(-e "$dir/$out.xml")) {
            `cd $dir; ln -s $out.ru.xml $out.xml`;
        }
        `perl -I$Tools::tools $Tools::tools/xml2paths --input $dir/$out.xml --paths $paths`;
    }
    close($DIR);

    # print STDERR " done\n";
}

sub usage {
    return <<USAGE;
USAGE:
    > rebuild --paths PATHS

    for example:
    > rebuild --paths lego/blocks:lego/services/fotki/blocks:blocks
USAGE
}

