#!/usr/bin/perl 

use Text::CSV_XS;
use Getopt::Std;
use Cwd 'abs_path';
use JSON;
my %options = ();
getopts("l:p:",\%options);

my $lang    = lc $options{l};
my $csvFile = lc $options{f};
#my $localePath =  $options{p};
my $localePath     =  "/www/opals/htdocs/theme/opals/locale/";


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

exit 1 if($lang eq "en");
print "$localePath\n$lang\n";


update("$localePath/en/",$lang);
updateJsMsg($lang);
#------------------------------------------------------------------
sub updateJsMsg{
    my ($lang)=@_;
    my $msgMap_en=getMsgJson("en");
    my $msgMap   =getMsgJson($lang);
    foreach my $var(keys %$msgMap_en){
        if(!defined $msgMap->{$var}){
            $msgMap->{$var}=$msgMap_en->{$var};
        }
    }
    my $msgJson="var oplMsg=" .JSON->new->pretty(1)->canonical(1)->encode($msgMap) . ";";
    open  MSG,">$rootDir/htdocs/js/angularjs/locale/msg_". $lang. ".js";
    print MSG $msgJson;
    close MSG;
        

}
#------------------------------------------------------------------

sub getMsgJson{
    my($lang)=@_;
    my $jsonStr="";
    open MSG,"<$rootDir/htdocs/js/angularjs/locale/msg_". $lang. ".js";
    while(<MSG>){
        $jsonStr .=$_;
    }
     $jsonStr =~ s/var oplMsg=//;
     $jsonStr =~ s/};/}/;
     my $jsonObj= from_json($jsonStr);
    return $jsonObj;
}

#------------------------------------------------------------------
sub update{
    my ($path,$lang)=@_;
    #print "$path\n";
    foreach my $f(<$path/*>){
        if(-f $f){
            updateMsg($f,$lang);
        }
        else{
            update($f,$lang);
        }
    }

}

#------------------------------------------------------------------
sub updateMsg{
    my ($filePath,$lang)=@_;
    my $filePath_lang=$filePath;
    $filePath_lang =~ s/\/en\//\/$lang\//;
    my $dd=0;
    if(-f $filePath_lang){
        my $msg_en   =getMsg($filePath);
        my $msg_lang =getMsg($filePath_lang);
        foreach my $var (keys %$msg_en){
            if(!defined $msg_lang->{$var}){
                $msg_lang->{$var}=$msg_en->{$var};
                print "$filePath_lang -- $var \n";
                $dd=1;
            }
        }
        if ($dd){
            print "$filePath_lang\n";
            saveMsg2File($filePath_lang,$msg_lang);
        }

    }
}

#------------------------------------------------------------------
 
sub getMsg{
    my ($filePath)=@_;
    $file =~ s/\/\//\//g;
    open IN, "<$filePath";
    my $msgMap={};
    while(<IN>){
        my $line =$_;
        if($line =~ m/(.*)=(.*)/g ){
            my $var=$1; 
            my $msg=$2;
            $var=trimStr($var);
            $msg=trimStr($msg);
            next if($var =~ m/^#/);
            $msgMap->{$var} =$msg;
            #printf  "%s=%s",$var,$msg;

        }
    }
    close IN;
    return $msgMap;
}
#------------------------------------------------------------------
 
sub saveMsg2File{
    my ($filePath,$msgMap)=@_;
    print "$filePath\n";
    open MSG ,">$filePath";
    foreach my $var(sort keys %$msgMap){
        #printf MSG "%s=%s",%var,$msgMap->{$avr};
        printf  MSG  "%s=%s\n",$var,$msgMap->{$var};
    }
    close MSG;
}

#------------------------------------------------------------------
sub trimStr{
    my ($str)=@_;
    $str=~ s/^\s+//g;
    $str=~ s/\s+$//g;
    return $str;

}


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

