#!/usr/bin/perl

#use utf8;
use strict;
use CGI;
use JSON;
use POSIX qw(
    ceil
);


use Opals::Context;
use Opals::Template qw(
    tmpl_read
    tmpl_write
);
use Opals::Date qw(
    date_f005
);
use Opals::Session qw(
    SessionHdl_getSSID
    SessionHdl_exist_rid
);
my $dbh = Opals::Context->dbh();
END { $dbh->disconnect(); }
my $request=getRequest();

my $cgi     = CGI->new;
my $dateToday = date_f005();
$dateToday =~ s/([\d]{4})([\d]{2})([\d]{2})[\d]+\.(0|1)/$1-$2-$3/;

my $dateFrom=($request->{'from'})? $request->{'from'} :"1970-01-01";
my $dateTo  =($request->{'to'})? $request->{'to'} : $dateToday;
my $pagesize = 20;
my $pNum = $request->{'pNum'};
$pNum = 1 if ( !$pNum );
my $sort    = $request->{'sort'};
$sort = 'modDate' if ( !$sort );

my ($countRs,$rs)   = getRecordModList($dbh, $dateFrom, $dateTo, $sort, $pNum, $pagesize);
my $rsJSON = to_json({countRs=>$countRs,rs=>$rs},{pretty=>1});


print "Content-type: text/plain\n\n";
print  $rsJSON;

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


sub getRecordModList {
    my ($dbh, $dateFrom, $dateTo, $sort, $pNum, $pagesize) = @_;
    my $pageoffset = $pNum;
    if ( !$pageoffset ) {
        $pageoffset = 0;
    }
    else {
        $pageoffset = ($pNum - 1) * $pagesize;
    }
  
   my ($countRecord)= $dbh->selectrow_array("select  count(distinct m.rid)
from    opl_marcRecord m  inner join opl_item i on i.rid=m.rid
where  i.available=1 &&  m.modDate between '$dateFrom' and  '$dateTo' + interval 1 day 
        && m.modDate <> i.dateImport");
       
    my $sql = <<_STH_;
select  distinct m.rid,m.title,m.titleSort,m.author,m.modDate,i.callNumber
from    opl_marcRecord m  inner join opl_item i on i.rid=m.rid
where  i.available=1 &&  m.modDate between '$dateFrom' and  '$dateTo' + interval 1 day 
        && m.modDate <> i.dateImport
        && i.barcode not regexp '___'
group by m.rid        
order by $sort 
limit   $pageoffset, $pagesize
_STH_
    
    
    
    my $sth = $dbh->prepare($sql);
    $sth->execute();
    
my $ssVar="hitList_mod";
my $ssid   = SessionHdl_getSSID($cgi);

    my $pNum = -1;
    my @recordList =();
    my $holdingList;
    my $preRid=0;
    my $barcode;
    my $holdingList;
    while (my $r = $sth->fetchrow_hashref) {
        if($preRid != $r->{'rid'}){
            my $rec;
            $preRid = $r->{'rid'};
            $rec->{'rid'}= $r->{'rid'};
            $rec->{'title'}= $r->{'title'};
            $rec->{'author'}= $r->{'author'};
            $rec->{'modDate'}= $r->{'modDate'};
            $rec->{'callNumber'}= $r->{'callNumber'};
            $pNum++;        
            $rec->{'odd'} = $pNum%2;
            $rec->{'order'} = $pNum;
            $rec->{'marcXmlExist'}=isMarcXmlExist($rec->{'rid'});
            $rec->{'selected'} = SessionHdl_exist_rid($dbh,$ssid,$ssVar,$rec->{'rid'});
            $rec->{'holdings'} =getRecordHolding($dbh, $rec->{'rid'});
            push @recordList, $rec;

        }
        
        if($r->{'barcode'} =~m/^\_\_\_(.*)\_[\d]+$/){
            $barcode=$1;
        }
        else{
           $barcode='n/a';
        }
     }
    $sth->finish;
    return ($countRecord,\@recordList);
}

#------------------------------------------------------------------------------
sub getRecordHolding{
    my ($dbh,$rid) =@_;
    my $sql = <<_STH_;
select  barcode
from    opl_item 
where   available=1 && rid=? 
        && barcode not regexp '___'
_STH_
  my $sth = $dbh->prepare($sql);
    $sth->execute($rid);
    my $holdingList;
    while (my $i = $sth->fetchrow_hashref) {
        push @$holdingList, $i;
    }
    return $holdingList;
}
#------------------------------------------------------------------------------
sub isMarcXmlExist{
    my ($rid) =@_;
    my $zRoot   = Opals::Context->config('zRoot');
    my $zDatabase = Opals::Context->config('zDatabase');
    my $dir     = "$zRoot/$zDatabase/" . ceil($rid/1000);
    
     
    return (-f "$dir/$rid.xml");

}
#-------------------------------------------------------------------------------
sub getRequest{
  my $in={};
  if ($ENV{'REQUEST_METHOD'} eq "POST") {
        my $json ="";
        while (<STDIN>) {
            $json .= $_;
        }
        $in = decode_json($json);
   }
   return $in;
}

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