#!/usr/bin/perl 

use Text::CSV_XS;
use Getopt::Std;
use Cwd 'abs_path';

my %options = ();
getopts("l:c:f:p:",\%options);

my $op      = lc $options{c};
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");


my $msgMap={};
if($op eq 'tomsgfile') {
    my $msgTbl=loadCSVformFile($csvFile);
    msgToCsv("$localePath/en","en");
    msgToCsv("$localePath/$lang",$lang);
    
    foreach my $f( keys %{$msgMap->{"en"}}){
       my @msgArr=();
       foreach my $k(keys %{$msgMap->{'en'}->{$f}}){
      #  print $msgMap->{$lang}->{$f}->{$k}->{'msg'} ,"\n" if($f =~ m/\.js$/gi);
            if(defined $msgTbl->{$f}->{$k} && $msgTbl->{$f}->{$k} ne "" ){
               $msgMap->{$lang}->{$f}->{$k}->{'msg'}=$msgTbl->{$f}->{$k};
            }
            my $msgTran=$msgMap->{$lang}->{$f}->{$k}?$msgMap->{$lang}->{$f}->{$k}->{'msg'}:$msgMap->{'en'}->{$f}->{$k}->{'msg'};
            
            #CASE: RUSSIAN  retranslation msg contain #{var}
#            if($lang eq 'ru' && $msgMap->{'en'}->{$f}->{$k}->{'msg'}  =~ m/#{.*?}/gi){
#                $msgTran=$msgMap->{'en'}->{$f}->{$k}->{'msg'};
#            }
            # END CASE
            
            my $el=$msgMap->{'en'}->{$f}->{$k};
            $el->{'msgTran'}=$msgTran;
            push @msgArr,$el;
        }
        @msgArr =sort {$a->{'index'} cmp $b->{'index'}} @msgArr;
        my $fPath=getFilePath("/tmp/",$f,$lang);
        open  WRMSGFILE, ">$fPath";
        my $fmtStr=($f !~ m/\.js$/gi)?"%-25s =%s\n":"%-25s =\"%s\";\n";
        foreach my $e(@msgArr){
            #print "$f\n";
            if($f eq "/js/msg.js"){
                $e->{'msgTran'} =  trimStr($e->{'msgTran'});
                $e->{'msgTran'} =~ s/[;]+$//g; 
                $e->{'msgTran'} =~ s/^"+|"+$//g; 
            }
            printf WRMSGFILE $fmtStr, $e->{'mKey'}, $e->{'msgTran'};
        }
        close WRMSGFILE;

                        
    }     



   
}
elsif($op eq 'tocsv'){
    msgToCsv("$localePath/en","en");
    msgToCsv("$localePath/$lang",$lang);
    my $msgFile={};
    my $csv = Text::CSV_XS->new({ binary => 1 });
    print "$localePath   >>>  $lang \n";

    open MSGCVS ,">/tmp/msg/$lang.csv";
    foreach my $f( keys %{$msgMap->{'en'}}){
        my @msgArr=();
        foreach my $k(keys %{$msgMap->{'en'}->{$f}}){
            my $msgTran=$msgMap->{$lang}->{$f}->{$k}?$msgMap->{$lang}->{$f}->{$k}->{'msg'}:"";
            my $el=$msgMap->{'en'}->{$f}->{$k};
            $el->{'msgTran'}=$msgTran;
            push @msgArr,$el;
        }
        @msgArr =sort {$a->{'index'} cmp $b->{'index'}} @msgArr;
        print MSGCVS "\n\n\"$f\",\"\",\"\"\n\n";
        foreach my $e(@msgArr){
            $e->{'mKey'} =~s/^[ "]+|[ "]+$//g;
            $e->{'msg'} =~s/^[ "]+|[ "]+$//g;
            $e->{'msgTran'} =~s/^[ "]+|[ "]+$//g;
            printf MSGCVS "\"%s\",\"%s\",\"%s\"\n", $e->{'mKey'},$e->{'msg'},$e->{'msgTran'};
        }

    }

    close MSGCVS;
 }    
else{
    print "Usage: $0 -c tocsv|tomsgfile\n";
    exit 1;

}

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

}

#------------------------------------------------------------------
 
sub getMsg{
    my ($filePath,$lang)=@_;
   #### 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 $ind=0;
    while(<IN>){
        my $line =$_;
        if($line =~ m/(.*)=(.*)/g ){
            my $var=$1; 
            my $msg=$2;
            #if($file =~ m/\.js$/g){
            #    $msg=~ s/^\s+|\s+$//g;
            #    $msg=~ s/;+$//g;
            #    $msg=~ s/^"|"$//g;
            #}

            $var=trimStr($var);
            $msg=trimStr($msg);

            $msgMap->{$lang}->{$file}->{$var} ={index=>$ind++,mKey=>$var,msg=>$msg};
        }
    }
    close IN;
}
#------------------------------------------------------------------
sub  loadCSVformFile{
    my($file)=@_;
    my $msgMap={};
    my $msgFileName=""; 
    
###print"[[[$file]\n";
    open  MSGFILE, "<$file";
    while (<MSGFILE>) {
        my $csv = Text::CSV_XS->new({ binary => 1 });
        $csv->parse($_);
        my @field = $csv->fields();
        next if(scalar(@field)!=3 || $field[0] eq "" );
        if($field[1] eq "" && $field[2] eq ""){
             $msgFileName= $field[0];
             $msgFileName =~ s/\/\//\//g;
             $msgMap->{$msgFileName}={};
             next;
        }
#        if($msgFileName =~ /\.js$/){
#            $field[2]=~ s/"/\\"/g;
#            next if($field[2] eq "");
#            $field[2]="\"$field[2]\";";
#        }
        #$field[0]=~ s/^[ "]+|[ "]+$//g;
        #$field[2]=~ s/^[ "]+|[ "]+$//g;
        $field[0]= trimStr($field[0]);
        $field[2]= trimStr($field[2]);


        $msgFileName =~ s/www\/opals\/htdocs\/theme\/opals\/locale\/en\///g;
     ### $msgFileName= "js/marc21Tagdesc.js" if($msgFileName eq "");
        $msgMap->{$msgFileName}->{$field[0]}=$field[2];


    #print"[$msgFileName][$field[0]][$field[2]]\n";
    }
    close MSGFILE;
    return $msgMap;
     
    
}
#------------------------------------------------------------------
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];
     
}

#------------------------------------------------------------------
sub toCSVFile{
}
#------------------------------------------------------------------

