#!/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
    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/searchPage.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 == 0 ) || ($sortOrder = 1);
    if (!$sortOrder ) {
        $sortOrder == 0;
    }



my ($resultSize, $recordList);

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

if ($kw && $sfCode){
    if ($sfCode eq '852_p'){
        ($resultSize, $recordList) = search_record_byBarcode($dbh, $kw, $offset, $pSize, $sortOrder, $sortAttr);
    }elsif ($sfCode eq '852_k'){
        ($resultSize, $recordList) = search_record_byCallNumber($dbh, $kw, $offset, $pSize, $sortOrder, $sortAttr);
    }
    else{
        ($resultSize, $recordList) = search_record($dbh, $sfCode, $kw, $offset, $pSize, $sortOrder, $sortAttr);
        if ($resultSize<=0){
            ($resultSize, $recordList) = search_record_byBarcode($dbh, $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->{'numAvailable'}    = $numTotal - $numLoan;
}
    
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(
    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,
);


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

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

);

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