#!/usr/bin/perl

#use utf8;
use strict;
use CGI;

use Time::localtime;
use Opals::Context;
use Opals::Template qw(
    tmpl_read
    tmpl_write
    tmpl_preference
);

use Opals::User qw(
    user_getInformationById
);
use Opals::Circulation qw(
    circ_getReserveInfo
    circ_getRecInfo
    circ_cancelHoldReserve
    circ_updateReqRsvStatus
);

use JSON;

use Opals::Constant;

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        => 'ajax/circ/cancelHoldReserve.tmpl',
        reqPermission   => 'circ_loan',
    }
);

my $dateDue;
my $tm = localtime;
my $todayStr = sprintf("%04d-%02d-%02d", $tm->year+1900, ($tm->mon)+1, $tm->mday);

my ($errCode, $ck, $resp) = Opals::User::user_currentUser($dbh, $cgi);
if ($permission && $permission->{'circ_loan'}) {
    my @reserveIdArr=split /,/,$input->{'reserveIdList'};
    my @cancelRSList=();
    foreach my $reserveId (@reserveIdArr){ 
        my $reserveInfo =circ_getReserveInfo($dbh,$reserveId);
        my $userOnholdList;
        my $recInfo;
        my $retMsgCode="";
        my $uid=0;
        if($reserveInfo->{'rid'}){
            $recInfo=circ_getRecInfo($dbh,$reserveInfo->{'rid'});
            $userOnholdList =circ_cancelHoldReserve($dbh,$reserveId,$todayStr);
            updateRequestStatus($dbh,$reserveId);
            $retMsgCode="01";
        }
        else{
            $retMsgCode="02";
        }
        my $rs ={ msgCode  =>$retMsgCode,
                  uid      =>$reserveInfo->{'uid'}, 
                  reserveId=>$reserveId,
                  bibInfo =>{
                      rid        => $recInfo->{'rid'},
                      title      => $recInfo->{'title'},
                      author     => $recInfo->{'author'},
                      pubName    => $recInfo->{'pubName'},
                      pubDate    => $recInfo->{'pubDate'}
                  }
                };
        if(scalar($userOnholdList)>0 ){
            $rs->{'userOnholdList'} =[];
            foreach my $h(@$userOnholdList) {
                push @{$rs->{'userOnholdList'}},{
                    uid=>$h->{'uid'},
                    firstName=>$h->{'firstname'},
                    lastName=>$h->{'lastname'}
                }
            };
        }
        push @cancelRSList,$rs;

   } 
   # $template->param(cancelationList=>\@cancelRSList);
    my $rs={cancelation=>\@cancelRSList};
    print "Content-type: text/plain\n\n";
    print   to_json($rs,{pretty=>1});
    

      
}
#-------------------------------------------------------------------------------------------
sub updateRequestStatus{
    my($dbh,$idReserve)=@_;
    my ($id)=$dbh->selectrow_array("select id from opl_requestReserve where idReserve=?",undef,$idReserve);
    if($id && $id>0){
        circ_updateReqRsvStatus($dbh, $id,'cancel',undef,$resp->{'uid'},undef);
    }
}
#-------------------------------------------------------------------------------------------
#tmpl_write($dbh, $cgi, $cookie, $template);
#-------------------------------------------------------------------------------------------
