#!/usr/bin/perl 

use Text::CSV_XS;
use Getopt::Std;
use JSON;
use Cwd 'abs_path';
my %options = ();
getopts("l:o:",\%options);
### for l in en fr es pt ar ru;do /www/opals/script/util/locale/converMsg_js -l $l;done
my $lang    = lc $options{l};

my $outFiles="/tmp/msg$lang.js";
if($options{o} && $options{o} ne ''){
    $outFile=$options{o};
}

my $localePath     =  "/www/opals/htdocs/theme/opals/locale/";
my $localePath_ang =  "/www/opals/htdocs/js/angularjs/locale/";



my $rootDir= abs_path($0);
if($rootDir =~ s/\/www\/(.*?)\/(.*)/\/www\/$1/){
    $localePath     ="$rootDir/htdocs/theme/opals/locale/";
    $localePath_ang ="$rootDir/htdocs/js/angularjs/locale/";
}

print "$lang --$localePath -- $localePath_ang\n";

my $msgMap={en  =>loadMsgJS("$localePath_ang/msg_en.js")};
msgToJs("$localePath/en","en");

if($lang ne "en"){
    $msgMap->{$lang} =loadMsgJS("$localePath_ang/msg_$lang.js");
    msgToJs("$localePath/$lang",$lang);
    foreach my $k(keys %{$msgMap->{'en'}}){
        if(!defined $msgMap->{$lang}->{$k}){
            $msgMap->{$lang}->{$k}=$msgMap->{'en'}->{$k};
        }
    }
}


my $json = new JSON();
$json = $json->sort_by(sub {
    return 1 if ($JSON::PP::a eq "version");
    return 1 if ($JSON::PP::b eq 'version');
    $JSON::PP::a cmp $JSON::PP::b;
    }
);
 
open MSGJS ,">$outFile";
print MSGJS "var oplMsg=";
print MSGJS $json->pretty->encode($msgMap->{$lang}); 
close MSGJS;
#------------------------------------------------------------------
sub msgToJs{
    my ($path,$lang)=@_;
    foreach my $f(<$path/*>){
        if(-f $f){
            getMsg($f,$lang);
        }
        else{
            msgToJs("$f",$lang);
        }
    }
 
}
#------------------------------------------------------------------
sub loadMsgJS{
   my ($path)=@_;
   print "\n<$path>\n";
    my $msg={};
    if(-f $path){
        open MSG_OLD ,"<$path";
        my $msgJson="";
        while(<MSG_OLD>){
            $msgJson .=$_;
        }
        $msgJson =~ s/var oplMsg=//g;
        $msg=from_json($msgJson);
    }
    return $msg;

}
#------------------------------------------------------------------
 
sub getMsg{
    my ($filePath,$lang)=@_;
    #return if($filePath !~ m/\/js\//);
   #### printf "    %s -------------%s[%s]\n", $filePath ,$lang,$localePath;
    $file =~ s/\/\//\//g;
    open IN, "<$filePath";
    my  $file=$filePath;
    # print "[$file][$localePath]\n";
    $file =~s/^$localePath//g;
    ####Ha ????  $pattern="/$lang/";
    $pattern="$lang/";
    $pattern =~ s/\/\//\//g;
    $file =~s/$pattern//g ;
    my $isJsFile =($file =~ m/\.js$/g);
    my $ind=0;
    while(<IN>){
        my $line =$_;
        if($line =~ m/(.*)=(.*)/g ){
            my $var=$1; 
            my $msg=$2;
            if($isJsFile){
                $var =~  s/(\s*)(var )(.*)/$3/g;
                $var =~  s/^\s+|\s+$//g;
                $msg=~ s/^\s+|\s+$//g;
                $msg=~ s/;+$//g;
                $msg=~ s/^"|"$//g;
            }
            print "$var\n";

            $var=trimStr($var);
            $msg=trimStr($msg);
            next if($var =~ m/^#/);

            $msgMap->{$lang}->{$var} =$msg;
        }
    }
    close IN;
}
#------------------------------------------------------------------
sub trimStr{
    my ($str)=@_;
    $str=~ s/^\s+//g;
    $str=~ s/\s+$//g;
    return $str;

}
#------------------------------------------------------------------
sub getFilePath{
    my ($locPath,$fname,$lang)=@_;
    my $path="";
    $fname =~ s/file://;
    $fname =~ s/^\s+//;
    $fname =~ s/\s+$//;  
    $fname = "$locPath/$lang/$fname";
    $fname =~ s/\/\//\//g;

    my @p=split(/\//,$fname);
    my $i=0;
               ### print ">>>>fname:" .  $fname . "\n";
    for($i=0; $i<scalar(@p)-1;$i++){
        $path .="/". @p[$i] ;
        next if(-d $path);
        system("mkdir -p $path");
        system("chmod 2775 $path");
        system("chown apache.opals  $path");
        
     }
     return $path. "/". @p[$i];
     
}


#------------------------------------------------------------------

