#!/usr/bin/perl 

use lib "/www/odev/module";;
use Opals::Context('/etc/opals/conf/opl_ha');
use strict;
use Opals::UrlRegistry qw(
    ureg_getUrlRegistry
    ureg_getMenu
);
use Time::HiRes qw( time );
use CGI;
use DBI;
use Text::CSV_XS;
use Opals::Date qw(
    date_parse
);
use Class::CSV;
use JSON;
use Opals::Template qw(
    tmpl_preference
);

use Opals::BackgroundJobs qw(
    bgjob_create
);
use Digest::SHA qw(
    sha1_hex
);

my $dbh = Opals::Context->dbh();
#'update','append','appendF','delete','copy','transfer','updateAddNew','changeRecType','moveHolding'
#req_id | bgJobId | uid | o_code | n_code | o_data | n_data | newRecType | action | frDate | toDate | reqDate| finishDate | status
#
my $sthItem=$dbh->prepare("select  rid,barcode from opl_ge852record where req_id=?");
my $sql="select req_id,action,tag,newRecType,o_code,o_data,n_code,n_data ,reqDate from  opl_ge852request where action <>'' order by req_id";
my $sth = $dbh->prepare($sql);
$sth->execute();
while (my ($req_id,$action,$tag,$newRecType,$o_code,$o_data,$n_code,$n_data,$reqDate)= $sth->fetchrow_array) {
    my $job={};
     if($action eq 'delete'){
        $job={action=>'delSubfield:',
              param=>{tag=>$tag,code=>$o_code}
              };
    }
    elsif($action eq 'update'){
        $job={action=>'datafieldReplace',
              param=>{tag=>$tag,
                      code=>$o_code,
                      txt_srch=>$o_data,
                      txt_new=>$n_data}
        }
    }
    elsif($action eq 'append'){
        $job={action=>'addSubfield',
              param=>{tag=>$tag,
                      code=>$n_code,
                      data=>$n_data}
        }
    }
    elsif($action eq 'appendF'){
        $job={action=>'addDatafield',
              param=>{tag=>$tag,
                      ind1=>'',ind2=>'',
                      sfList=>[{code=>$n_code,
                                data=>$n_data}
                                ]
              }
        }
    }
    elsif($action eq 'transfer'){
          $job={action=>'mvSubfield',
              param=>{srcTag=>$tag,
                      srcCode=>$o_code,
                      tarTag=>$tag,
                      tarCode=>$n_code}
        }
  
    }
    elsif($action eq 'copy'){
        $job={action=>'cpSubfield',
              param=>{srcTag=>$tag,
                      srcCode=>$o_code,
                      tarTag=>$tag,
                      tarCode=>$n_code}
        }
    }
    elsif($action eq 'updateAddNew'){
        if($tag eq '852' && $o_code eq '3'){
            $job={action=>'updateItemType',
                  param=>{newType=>$n_data}
            }
        }
        else{
            $job={action=>'addSubfield',
                param=>{tag=>$tag,
                      code=>$n_code,
                      data=>$n_data}
            }
     
        }
    }
    elsif($action eq 'changeRecType'){
        $job={action=>'updateRecType',
              param=>{newType=>$newRecType}
        }
    }
    elsif($action eq 'moveHolding'){
        $job={action=>'moveHolding',
              param=>{rid=>$n_data}
        }
    }
    
    $sthItem->execute($req_id);
    my $ridBcArr=[];
    while(my($rid,$bc)=$sthItem->fetchrow_array){
        push @$ridBcArr,{rid=>$rid,barcode=>$bc};
    }
    my $jobId=undef;
       $jobId=bgjob_create_conv($dbh,to_json($job),$ridBcArr,$reqDate);
}

############################################################################################
sub bgjob_create_conv{
    my($dbh,$job,$itemList,$reqDate)=@_;
    my $str=$job;
    if(defined $itemList){
        foreach my $i(@$itemList){
            $str .=$i->{'rid'}.$i->{'barcode'};
        }
    }
    my $signature = sha1_hex($job . $str);
    my $sth=$dbh->prepare("insert into opl_bgJob set job=?,signature=?,status='done',jobDate=?");
    $sth->execute($job,$signature,$reqDate);
    my $jId=$dbh->{'mysql_insertid'};
    $sth=$dbh->prepare("insert into opl_bgJobItem set jobId=?,rid=?,barcode=?,status='done'");
    foreach my $item(@$itemList){
        $sth->execute($jId,$item->{'rid'},$item->{'barcode'}||'');
    }
    return $jId;
}

