#!/usr/bin/perl

#use utf8;
use strict;
use CGI;

use POSIX qw(
    ceil
    floor
);
use Opals::Context;#use MARC::File::USMARC;
use Opals::Template qw(
    tmpl_read
    tmpl_write
    tmpl_preference
);

use XML::SAX;
use base qw( XML::SAX::Base );
use Opals::MarcXmlParser; 
use Opals::SolrIndex qw(
    slr_search
    slr_buildSearchQuery
    slr_buildSReviewItemQuery
    slr_buildSNewItemQuery
    slr_getHiliTems
    
);
use Opals::Locale qw(
    loc_getMsgFile
    loc_write
);

use Opals::RecordInfoHTML qw(
    rinfo_getBibRecordHTML
    rinfo_getSimilarItemsHTML
    rinfo_getRecCircInfoHTML
    rinfo_getPageNavForm_search
    rinfo_getRatingInfoHTML
);
use Opals::Circulation qw(
    circ_infoRecord
);

use Opals::Search qw(
    srch_buildNewItemSQLs
    srch_searchRecordSQL
    srch_recordBrief
);
use Opals::BookCover qw(
    bookCover_getUrl
);
use Opals::Date qw(
    date_today
);
use Opals::Constant;

    my $dbh = Opals::Context->dbh();
    my $cgi     = CGI->new;
    my $input = $cgi->Vars();
    END { $dbh->disconnect(); }

my ($permission, $cookie, $template) = tmpl_read(
        {
            dbh             => $dbh,
            cgi             => $cgi,
            tmplFile        => 'search/recDetailPage.tmpl',
        }
);
my $msgValMap={} ;
my $self = $ENV{'SCRIPT_NAME'};
my @cookieList = (@$cookie);

my ($query, $pqf, $sTerm);

my $pref = tmpl_preference($dbh);

my $isLccSystem=0;
if($pref->{'classificationSystem'} eq 'LCC'){
    $isLccSystem=1;
}



my $circInfoOption={};
$circInfoOption->{'enableItemStatus'}=1 if($permission && $permission->{'circ_loan'});
$circInfoOption->{'enableItemHistory'}=1 if($permission && ( $permission->{'payment'}
                                                           ||$permission->{'fine'} 
                                                           ||$permission->{'report'} 
                                                           ||$permission->{'notice'} 
                                                           ));
$circInfoOption->{'showLocation'}=$pref->{'showLocation'};
    # ---------------------- SEARCH --------------------
    my  $offset         = $input->{'recRsPos'};
    my  $rid            = $input->{'rid'};
    my  $srchPage       = $input->{'srchPage'};
    my $tmpInput = $input;
    if( defined $rid && $rid>0){
         $tmpInput={kw0 =>$rid, sf0 =>'12'};
         if($srchPage ne 'newItem' && $srchPage ne 'review' && $srchPage ne 'shelfBrowse'){
            $offset=0;
         }
    }
    my $sortAttr    = $input->{'sortAttr'};
    my $sortOrder   = $input->{'sortOrder'};
    $template->param(
        reserveActive => ($permission->{'circ_rsrv'} || $permission->{'circ_rsrv_self'}) ? 1 : 0,
    );
    my $rs={};

    my ($isFirst,$isLast);
    my $pNum = $input->{'pNum'};
    my $rec=undef;
    my $hits =0 ;my $lQuery='';
    if($srchPage eq 'newItem' ){
        $lQuery=slr_buildSNewItemQuery($input);
    }
    elsif($srchPage eq 'review' ){
        if(!defined $sortAttr || $sortAttr eq '' ) {$sortAttr =9003; $sortOrder =1;}
        $lQuery=slr_buildSReviewItemQuery($input);
    }
    else{

        if(defined $rid && $rid>0){
            $lQuery      = slr_buildSearchQuery($tmpInput);
        }
        else{
            my $filter;
            my @recType     = $cgi->param('recType');
            $filter->{'recType'}=\@recType;
            my @location    = $cgi->param('location');
            $filter->{'location'}=\@location;
            $lQuery      = slr_buildSearchQuery($tmpInput,$filter);
        }
           
    }

     $rs   = slr_search({lQuery=>$lQuery,recFormat=>'detail',
                            sortAttr=>$sortAttr,sortDir=>$sortOrder, 
                            offset=>$offset,size=>1,
                            incCircStatus=>1,
                            isLccSystem=>$isLccSystem});
        $rec=$rs->{'recordList'}[0];
        $hits = $rs->{'hits'};
    $rec->{'callNum1St'} = $rec->{'callnum1St'};
    ($pNum && $pNum > 0) || ($pNum = 1);
    my $firstIndex=0;
    my $lastIndex=$hits -1;

    $isFirst =  ($offset == $firstIndex);
    $isLast  =  ($offset == $lastIndex) ;

    $rid =$rec->{'rid'};
  
    my $bkShelfMidCallno="";
    my $bkShelfMidRecId=0;
    $bkShelfMidCallno = $rec->{'callNum1St'};
    if($pref->{'classificationSystem'} eq 'LCC'){
        $bkShelfMidCallno = $rec->{'callNum1St'};
    }
    $bkShelfMidRecId = $rec->{'rid'};
#Tue, Jun 14, 2011 @ 11:40:49 EDT
#map the URI field to the corresponding URI map setting in the preference
    $rec->{'uriList'} =mapURI($rec->{'uriList'})if($rec->{'uriList'} && ref($rec->{'uriList'} ) eq 'ARRAY');
#/map URL    
    my  $titleFm = $rec->{'title'};
    $titleFm=~ s/[\:]+$//g;
    $titleFm=~ s/[\/]+$//g;
    $rec->{'titleFm'} = $titleFm;
    if($rec->{'subtitle'} && $rec->{'subtitle'} ne ''){
        my $subtitleFm = $rec->{'subtitle'};
        $subtitleFm=~ s/[\/]+$//g;
        $rec->{'subtitleFm'} = $subtitleFm;
    }
    my $recInfoHtml      = rinfo_getBibRecordHTML($dbh,$rec);
    my $similarItemsHtml = rinfo_getSimilarItemsHTML($rec);
    my $recCircInfoHtml  = rinfo_getRecCircInfoHTML($dbh,$rec,$circInfoOption);
    my $ratingInfo       = rinfo_getRatingInfoHTML($dbh,$rec->{'rid'});
    my $pageNavForm      = rinfo_getPageNavForm_search($cgi);
    my ($numTotal, $numLoan, $numReserve, $numHold, $items,$totalCirc,$bid)
            = circ_infoRecord($dbh,$rid);

    $template->param(recInfoHtml        => $recInfoHtml,
                     similarItemsHtml   => $similarItemsHtml,
                     recCircInfoHtml    => $recCircInfoHtml,
                     pageNavForm        => $pageNavForm,
                     ratingInfo         => $ratingInfo,
                     bkShelfMidCallno   =>$bkShelfMidCallno,
                     bkShelfMidRecId    =>$bkShelfMidRecId,
                     idvalid     => ($rs) ? 1:0,
                     rid         => $rid,
                     sortAttr    => $sortAttr,
                     sortOrder   => $sortOrder,
                     pNum        => $pNum,
                     isFirst     => $isFirst,
                     isLast      => $isLast,
                     recRsPos    => $offset,
                     title       =>$titleFm,
                     totalHolding=>$numTotal
     );
     my $highlightTerms =slr_getHiliTems($input); 
     $template->param(highlightTerms =>$highlightTerms) if(scalar($highlightTerms)>0);
     #$template->param(highlightTerms =>$rs->{'highlightTerms'}) if($rs->{'highlightTerms'} && scalar($rs->{'highlightTerms'})>0);

my $stdMsgMap  =loc_getMsgFile('search/recDetailPage.msg',$msgValMap);
loc_write($template,$stdMsgMap);

my $reserveMsgMap  =loc_getMsgFile('circ/reserve.msg',$msgValMap);
loc_write($template,$reserveMsgMap);
 
tmpl_write($dbh, $cgi, \@cookieList, $template);


################################################################################
sub getNewItemInfo_bk{
    my ($dbh,$input,$offset, $pSize) = @_;
    my $rec=undef;
    my ($sql,$sql_count)      = srch_buildNewItemSQLs($input);
    my ($resultSize, $result) = srch_searchRecordSQL($dbh,'f',  $sql,$sql_count,  $offset, $pSize);
    my $recRsPos =$offset;
    my $recBrief;
    if ($resultSize > 0) {
        my $marcXmlParser=Opals::MarcXmlParser->new() ;
        $rec = $marcXmlParser->getRecInfoGeneral(@$result[0]);
     }
     return  ($resultSize, $rec);
       
}

################################################################################
sub mapURI{
    my ($uriList)=@_;
    my $uriMap=undef;
    if($pref->{'learn360ClientKey'}){
        foreach my $u(@$uriList){
            if($u->{'uri'} =~ m/http:\/\/www.learn360.com/g){
                $u->{'uri'} ="/bin/search/learn360?uri=" . $u->{'uri'};
            }
        }
    }
    if($pref->{'ebrary'}){
        my $mhost = $pref->{'ebrary'};
        foreach my $u(@$uriList){
            $u->{'uri'} =~ s/http:\/\/site.ebrary.com\/(.*)/$mhost\/$1/g;
        }
    }
    return $uriList;
}
#===========================================================
sub getRelGenreList{
    my ($dbh,$rid)=@_;
    my $gList=[];
    my $sth=$dbh->prepare("select * from opl_genre g inner join opl_genreItems i using(gId) where rid=?");
    $sth->execute($rid);
    while(my $g=$sth->fetchrow_hashref){
        push @$gList,$g;
    }
    return $gList;
}

