#!/usr/bin/perl

use strict;
use CGI;
use POSIX qw(
    floor
);

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

use Opals::Tb_Record qw(
    
    tb_record_findByRId
    tb_item_findByRId

);
use Opals::User qw(
    user_currentUserID
);
use Opals::Tb_Search qw(
    
    search_record
    search_record_byBarcode
    search_record_byCallNumber
);

use Opals::Tb_Circulation qw(

    circ_infoRecord

);

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

my $cgi = CGI->new;
my $input = $cgi->Vars();
my ($permission, $cookieList, $template) = tmpl_read(
    {
        dbh             => $dbh,
        cgi             => $cgi,
        tmplFile        => '/txtbk/search/recDetail.tmpl',
    }
);
my $uIdInfo = user_currentUserID($dbh,$cgi);
my $sKw         = $input->{'sKw'};
my $sfCode      = $input->{'sfCode'};
my $sfIndex = $input->{'sfIndex'};
my $sortAttr    = $input->{'sortAttr'};
    if (!$sortAttr ){
        $sortAttr = '245_a';
    }
my $direction   = $input->{'direction'};
   $direction   = 0 if (! $direction);
my $rid         = $input->{'rid'};
my $resultOrder = $input->{'resultOrder'};
my $recRsPos    = $input->{'recRsPos'} + $direction;
my $sortOrder   = $input->{'sortOrder'};
my $resultSize  = $input->{'resultSize'};
my $offset      = $recRsPos;

my $pSize = 20;
my $pNum = floor($recRsPos /$pSize) + 1 || 0; 

my ($numTotal, $numLoan, $numReserve, $numHold, $itemList, $totalCirc,$numLost,$numDamaged,$numMissing); 
my ($recordId, $recordInfo);

if (!$rid){
    $template->param( 
        error   => 1,);
    }
else{
    $template->param(
        sKw         => $sKw,
        sfCode      => $sfCode,
        sfIndex     => $sfIndex,
        recRsPos    => $recRsPos ,
        sortOrder   => $sortOrder,
        sortAttr    => $sortAttr,
        pNum        => $pNum
    );
    my ($resultSize, $recordList);
    if ($sfCode && $sKw){
        if ($sfCode eq '852_p'){
            ($resultSize, $recordList) = search_record_byBarcode($dbh, $sKw , $offset , 1, $sortOrder , $sortAttr);
            ($recordId, $recordInfo) = tb_record_findByRId($dbh,$recordList->[0]->{'rid'});    
            ($numTotal,$numLoan,$numReserve,$numHold,$itemList,$totalCirc,$numLost,$numDamaged,$numMissing)=circ_infoRecord($dbh, $recordId);
        }
        elsif ($sfCode eq '852_k'){
            ($resultSize, $recordList) = search_record_byCallNumber($dbh, $sKw, $offset, 1, $sortOrder, $sortAttr);
            ($recordId, $recordInfo) = tb_record_findByRId($dbh,$recordList->[0]->{'rid'});    
            ($numTotal,$numLoan,$numReserve,$numHold,$itemList,$totalCirc,$numLost,$numDamaged,$numMissing)=circ_infoRecord($dbh, $recordId);
        }
        else{
            ($resultSize, $recordList) = search_record($dbh, $sfCode, $sKw, $offset , 1, $sortOrder , $sortAttr);
             if ($resultSize<=0){
                 ($resultSize, $recordList) = search_record_byBarcode($dbh, $sKw, $offset, 1, $sortOrder, $sortAttr);
             }
            ($recordId, $recordInfo) = tb_record_findByRId($dbh,$recordList->[0]->{'rid'});    
            ($numTotal,$numLoan,$numReserve,$numHold,$itemList,$totalCirc,$numLost,$numDamaged,$numMissing)=circ_infoRecord($dbh, $recordId);
        }
    }

    if ($permission && $permission->{'tb_record_edit'}){
         $template->param(allowEdit => 1);
    }
    if ($numLoan == 0 && $numReserve == 0 && $numHold == 0 ){
        $template->param(allowDeletion => 1);
    }
    my $firstIndex=0;
    my $lastIndex= $resultSize -1;
    #my $isFirst =  ((!$direction && $resultOrder == $firstIndex) || ($direction && $resultOrder+$direction == $firstIndex));
    #my $isLast =  ((!$direction && $resultOrder == $lastIndex) || ($direction && $resultOrder+$direction == $lastIndex));
    my $isFirst = ($recRsPos == 0)?1:0;
    my $isLast = ($recRsPos == $lastIndex)?1:0;
    $template->param(
        recordInfo      =>  $recordInfo, 
        rid             =>  $recordId,
        numTotal        =>  $numTotal,
        numLoan         =>  $numLoan,
        numReserve      =>  $numReserve,
        numHold         =>  $numHold,
        numReserveTotal =>  $numReserve + $numHold,
        numAvailable    =>  $numTotal - $numLoan ,
        itemList        =>  $itemList, 
        resultSize      =>  $resultSize,
        resultOrder     =>  $resultOrder + $direction,
        isFirst         =>  $isFirst,
        isLast          =>  $isLast,
        loggedId        => $uIdInfo->{'uid'} || 0
    );
}

#if ($permission && $permission->{'textbook_mgmt'}) {

if ($permission && $permission->{'tb_record_edit'}) {
    $template->param(textbook_mgmt => 1);
}

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

###################################################
