#!/usr/bin/perl

#use utf8;
use strict;
use CGI;

use Opals::Context;use POSIX;

use Date::Calc qw(Day_of_Week Week_Number Day_of_Year);

use Opals::User qw(
    user_getInformation
    user_getInformationById
    user_balance
    user_paid
    user_paymenthistory
);

use Opals::Circulation qw(
);


use Opals::Date qw(
    date_text
);
use JSON;

use Opals::Template qw(
    tmpl_read
    tmpl_write
    tmpl_preference
);

use Opals::User qw(
    user_currentUser
);
use Opals::Locale qw(
    loc_getMsgFile
    loc_write
);
use Opals::BookCover qw(
    bookCover_getUrl
    bookCover_amazon
    bookCover_google
    bookCover_syndetics

);

use Opals::MarcXmlParser; 
my $dbh = Opals::Context->dbh();
END { $dbh->disconnect(); }

my $cgi = CGI->new;
my $input = $cgi->Vars();

my ($permission, $cookie, $template) = tmpl_read(
        {
            dbh             => $dbh,
            cgi             => $cgi,
            tmplFile        => 'user/myReserves.tmpl',
#            reqPermission   => 'user_delete',
        }
);
my $lang=$template->param('curLang');
my $syspref = tmpl_preference($dbh);
my $marcXmlParser=Opals::MarcXmlParser->new() ;
my ($errCode, $myCookie, $user) = user_currentUser($dbh, $cgi);
my $uid = $user->{'uid'};    
my $reqList  = getReqList($dbh,$uid);

getBookCover($reqList);
 my $reqListJSON = to_json({reqList=>$reqList},{pretty=>1})  ;
    $template->param(reqList =>$reqListJSON); 


my $msgValMap ={};
my $msgMap            =loc_getMsgFile('user/userInfo.msg',$msgValMap);
loc_write($template,$msgMap);

tmpl_write($dbh, $cgi, $cookie, $template);

#////////////////////////////////////////////////////////////////////////////
sub getReqList {
    my ($dbh,$uid)=@_;
    my $sql = "select distinct q.*,m.title,m.titleSort,m.author     
               from    opl_requestReserve q 
                       inner join opl_marcRecord m on q.rid =m.rid                 
                       left outer join  opl_hold h on h.idReserve =q.idReserve 
               where   (h.dateExpiry>now() || q.dateExpiry>now()) && q.uid=? 
               order   by id";
               
    my $sth =$dbh->prepare($sql);  
    $sth->execute($uid);
    my @reqList; 

    while(my $r = $sth->fetchrow_hashref){
        my $countHold=0;
        if(!defined $r->{'idReserve'}){
            push @{$r->{'holdReserveList'}},{status=>$r->{'status'},idReserve=>undef};
        }
        elsif($r->{'status'} eq 'cancel'){
            push @{$r->{'holdReserveList'}},{'reserveCanceled'=>1,isCancel=>'1'};
        }

        elsif($r->{'status'} eq 'reserve' || $r->{'status'} eq 'hold'|| $r->{'status'} eq 'ready'){
            $r->{'holdReserveList'}=[];
            my $reserve =$dbh->selectrow_hashref("select numCopyReserve ,if(dateCancel is not null,1,0) reseveCancel 
                                                 from opl_reserve where idReserve=?",undef,$r->{"idReserve"});
            $r->{"status"}='cancel' if($reserve->{'reseveCancel'});
            if($reserve){
                $r->{'numCopyReserve'}=$reserve->{'numCopyReserve'};
                if($reserve->{'reseveCancel'}){
                    push @{$r->{'holdReserveList'}},{reserveCanceled=>1} ;
                }
                elsif($reserve->{'numCopyReserve'}>0){
                    push @{$r->{'holdReserveList'}},{numCopyReserve=>$reserve->{'numCopyReserve'}} ;
                }
            }
            if($r->{'status'} eq 'hold' || $r->{'status'} eq 'ready') {
                my $s=$dbh->prepare("select * from opl_hold where idReserve=?");
                $s->execute($r->{'idReserve'});
                while(my $h=$s->fetchrow_hashref){
                    $countHold++;
                    $h->{'status'} =$r->{'status'};
                    push @{$r->{'holdReserveList'}},$h;
                }
            }
        }
        $r->{'onHold'}=$countHold;
        push @reqList,$r;
    }
   return \@reqList;

}

sub getReqList_bk {
    my ($dbh,$uid)=@_;
    my $sql = "select  q.*,h.barcode,h.dateloan ,m.title,m.author     
               from    opl_requestReserve q 
                       left outer join opl_reserve r on r.idReserve=q.idReserve 
                       left outer join  opl_hold h on h.idReserve =r.idReserve 
                       inner join opl_marcRecord m on q.rid =m.rid                 
               where   h.dateLoan is null && q.uid=? 
               order   by id";
               
    my $sth =$dbh->prepare($sql);  
    $sth->execute($uid);
    my @reqList; 
    my $hasWaiting=0;              
    while(my $r = $sth->fetchrow_hashref){
      #  $r->{'dateExpiry'}=date_text($r->{'dateExpiry'},0);
       # $r->{'dateRequest'}=date_text($r->{'dateRequest'},0);
        if(defined $r->{'dateCancel'}){
           # $r->{'dateCancel'}=date_text($r->{'dateCancel'},0);
        }
        if(defined $r->{'barcode'} && $r->{'barcode'} ne ''){
            $r->{'status'}= "ON LOAN";
        }
        my $file =getRecordPath($r->{'rid'});
        my $b = $marcXmlParser->getRecInfoGeneral_file($file);
        
        if (defined $b && $b->{'isbn_first'} && $b->{'isbn_first'} ne '') {
               $r->{'isbn_first'} =$b->{'isbn_first'};
        }

        $hasWaiting = 1 if($r->{'status'} eq 'waiting'); 
        push @reqList, $r;
   }
   return (\@reqList,$hasWaiting);

}
#////////////////////////////////////////////////////////////////////////////

sub getRecordPath {
    my ($rid) = @_;
    
    my $zRoot   = Opals::Context->config('zRoot');
    my $zPort   = Opals::Context->config('zPort');
    my $zDatabase = Opals::Context->config('zDatabase');
    my $dir     = "$zRoot/$zPort/record/$zDatabase/" . ceil($rid/1000);

    return "$dir/$rid.xml";
}

#////////////////////////////////////////////////////////////////////////////
sub getBookCover{
    my($rec,$size,$caption)=@_;
    my  $awsId =Opals::Context->preference('amazonId');
    my  $awsSecretKey =Opals::Context->preference('amazonSecreteKey');
    my  $syndeticsId =Opals::Context->preference('syndeticsId');
    if($syndeticsId ne''){
        bookCover_syndetics($rec,$size,$caption);
    }
    elsif($awsId ne '' && $awsSecretKey ne ''){
        bookCover_amazon($rec,$awsId,$awsSecretKey);
    }
    else{
        bookCover_google($rec);
    }

}


#////////////////////////////////////////////////////////////////////////////
__END_OF_FILE:

