#!/usr/bin/perl

use strict;
use CGI;

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

);

use Opals::Tb_Record qw(
    
    tb_defRecordIndex_getList
    tb_record_items_deleteAll
);

use Opals::Tb_Search qw(
    
    search_record
    search_record_byBarcode
    
);

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.tmpl',
#        reqPermission   => 'reqPermission1|reqPermission2|etc.',
    }
);
################################################################################
# Delete Record
if ($permission && $ENV{'REQUEST_METHOD'} =~ m/^post$/i && $input->{'op'} eq 'delRec') {
        my $rid = $input->{'rid'};
        tb_record_items_deleteAll($dbh, $rid) if ($rid ne '' && $rid > 0);
}
#/Delete Record
################################################################################

my $defRecordIndexList  = tb_defRecordIndex_getList($dbh, 1);

my $kw          = $input->{'kw'};
my $sfCode      = $input->{'sfCode'};
my $sortAttr    = $input->{'sortAttr'};
    if (!$sortAttr ){
        $sortAttr = '245_a';
    }

my $sortOrder   = $input->{'sortOrder'};
    ($sortOrder && $sortOrder >=1 ) || ($sortOrder = 1);

my ($resultSize, $recordList);

my $pRange = 5;
my $pSize = 10;
my $curPage = $input->{'pNum'};
my $offset;
    ($curPage && $curPage >= 1) ||($curPage = 1 );
    $offset = ($curPage - 1 ) * $pSize;

$template->param(
    sKw         =>  $kw,
    pNum        =>  $curPage,
    sfCode      =>  $sfCode?$sfCode:'000_a',
    sfIndex     =>  ($input->{'sfIndex'})? $input->{'sfIndex'}:0,
    sortAttr    =>  $sortAttr,
    sortOrder   =>  $sortOrder,
    sortOrderReverse    => ($sortOrder && $sortOrder == 1)  ? 2 : 1,
    sortTitle           => ($sortAttr eq '245_a')           ? 1 : 0,
    sortAuthor          => ($sortAttr eq '100_a')           ? 1 : 0,
    sortISBN            => ($sortAttr eq '020_a')           ? 1 : 0,
    sortPubDate         => ($sortAttr eq '260_c')           ? 1 : 0,
    sortDown            => ($sortOrder && $sortOrder == 1)  ? 1 : 0,
);

if ($kw && $sfCode){
    if ($sfCode eq '852_p'){
        ($resultSize, $recordList) = search_record_byBarcode($dbh, $kw, $offset, $pSize, $sortOrder, $sortAttr);
    }
    else{
        ($resultSize, $recordList) = search_record($dbh, $sfCode, $kw, $offset, $pSize, $sortOrder, $sortAttr);
    }
}

foreach my $record(@$recordList){
    my ($numTotal, $numLoan, $numReserve, $numHold, $itemList,$totalCirc,$numLost,$numDamaged,$numMissing) = circ_infoRecord($dbh, $record->{'rid'});
       $record->{'numTotal'}        = $numTotal;
       $record->{'numLoan'}         = $numLoan;
       $record->{'numReserve'}      = $numReserve;
       $record->{'numHold'}         = $numHold;
       $record->{'numReserveTotal'} = $numReserve + $numHold;
       $record->{'numLost'}         = $numLost;
       $record->{'numDamaged'}      = $numDamaged;
       $record->{'numMissing'}      = $numMissing;
       $record->{'numAvailable'}    = $numTotal - $numLoan - $numHold - $numLost - $numMissing;
}
    
my $result = ($resultSize > 0)? 1:0;
if ($resultSize - $offset + 1 <= 0){
    my $availRange = $resultSize % $pSize;
    $availRange = $pSize if ($availRange == 0); 
    $offset = $resultSize - $availRange + 1;
    $curPage = ($offset - 1) / $pSize + 1;
}

my @rangedPageList = tmpl_rangedPageList($resultSize, $curPage, $pSize, $pRange);

$template->param(    search_off      => 0,);

$template->param(
    defRecIndexList     =>  $defRecordIndexList,
    result              =>  $result,
    resultSize          =>  $resultSize,
    recordList          =>  \@$recordList,
    rec_start       =>  $offset + 1,
    rec_end         =>  $offset + scalar(@{$recordList}),
    rangedPageList  =>  \@rangedPageList,

);

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