#!/usr/bin/perl

#use utf8;
use strict;
use CGI;
use Opals::Template qw(
    tmpl_read
    tmpl_write
    tmpl_preference
);
use Opals::Context;
use Opals::Constant;
use Opals::Locale qw(
    loc_getMsgFile
    loc_write
);


use Opals::Circulation qw(
    circ_getUserCircStatus
    circ_getItemStatus
    circ_getItemInfo
    eCirc_processLoan
    eCirc_updateReserve
);
use Opals::Date qw(
    date_now
    date_getDeadLineDate
);
use Opals::User qw(
    user_currentUser
);

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/ebookLoan.tmpl'
        }
);
my $todayStr  = date_now() ;
my $uid       = 0;
my $bid       = $input->{'bid'};
my $barcode   = undef; 

my ($errCode, $cookie, $user) = user_currentUser($dbh, $cgi);
my $userStatus      = undef;
my $itemCircStatus  = {status=>IT_STAT_NOEXIST};
my $itemInfo        = {loanPeriod=>0};

if($errCode==0 && $user->{'uid'}>0){
    $uid        = $user->{'uid'};
    $userStatus = circ_getUserCircStatus($dbh,$uid);
}

if (defined $bid && $bid>0) {
    $barcode= getBarcodeEbook($dbh,$bid);
    if(defined $barcode && $barcode ne""){
        $itemCircStatus  = circ_getItemStatus($dbh, $barcode);
        $itemInfo        = circ_getItemInfo($dbh, $barcode, $uid);

    }
}

my $loanPeriod   = $itemInfo->{'loanPeriod'};
my $userMsgCode  = getMsgCode_user($userStatus);
my $itemMsgCode  = getMsgCode_item($itemCircStatus,$itemInfo,$uid);
my $idloan=0;
my $status=0;
my $dueDate="";
if ($userMsgCode eq "10000" && $itemMsgCode eq "17"){
    $dueDate    = date_getDeadLineDate($loanPeriod ,$todayStr);
    $idloan     = eCirc_processLoan($dbh,$uid,$bid,$todayStr,$dueDate);
    eCirc_updateReserve($dbh,$idloan,$bid,$uid) if($idloan);
    $status=1;
}
$template->param(
                uid         => $uid,
                bid         => $bid,
                rid         => $itemInfo->{'rid'},
                idloan      => $idloan,
                dueDate     => $dueDate,
                title       => $itemInfo->{'title'},
                author      => $itemInfo->{'author'},
                itemType    => $itemInfo->{'itemId'},
                status      => $status,
                userMsgCode => $userMsgCode,
                itemMsgCode => $itemMsgCode,

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

sub getBarcodeEbook{
    my($dbh,$bid)=@_;
    my $sth=$dbh->prepare("select i.barcode from opl_item i inner join opl_ridBid e using(rid) where e.bid=? limit 1");
    $sth->execute($bid);
    my ($barcode ) = $sth->fetchrow_array;
    return $barcode eq '0E0'? undef:$barcode;
}
#-------------------------------------------------------------------------------------------
sub getMsgCode_user{
    my($userStatus)=@_;
    return $userStatus->{'status'}.$userStatus->{'overdue'}.$userStatus->{'maxLoan'}.$userStatus->{'maxRenew'}.$userStatus->{'maxReserve'};
}
#-------------------------------------------------------------------------------------------
sub getMsgCode_item{
    my ($itemCircStatus,$itemInfo,$uid)=@_;
    my $retCode="";
    my $loanUidList=$itemCircStatus->{'loanUidList'};
    if($itemCircStatus->{'status'}==IT_STAT_NOEXIST){
        $retCode="00";    }
    elsif($itemCircStatus->{'status'}==IT_STAT_RESTRICTED 
          || $itemInfo->{'loanPeriod'}==0 ){
        $retCode="02";    }
    elsif($itemCircStatus->{'status'}==IT_STAT_FULL_AVAIL && $loanUidList->{$uid}){
        $retCode="15";    }
    else{ # fully available
        $retCode="17";    }
    return $retCode;    
}

