#!/usr/bin/perl

#use utf8;
use strict;
use CGI;
use POSIX qw(
    ceil
    floor
);

use Opals::Context;
use Date::Calc qw(Day_of_Week Week_Number Day_of_Year);


use Opals::SolrIndex qw(
    slr_buildSNewItemQuery
    slr_search
);

use Opals::Date qw(
    date_parse
    date_today
    date_text
    date_f005
);
use Opals::Template qw(
    tmpl_read
    tmpl_write
    tmpl_rangedPageList
);

use Opals::BookCover qw(
    bookCover_amazon
    bookCover_google
    bookCover_syndetics
);

use Opals::Locale qw(
    loc_getMsgFile
    loc_write
);
use Opals::RecordInfoHTML qw(
    rinfo_getPageNavForm_search
);


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

my $cgi = CGI->new;
my $input = $cgi->Vars();
my $ridList= $input->{'ridList'};
my $tmplName=(exists $input->{'ridList'})?'newitems_prt.tmpl':'newitems.tmpl';
my ($permission, $cookie, $template) = tmpl_read(
        {
            dbh             => $dbh,
            cgi             => $cgi,
            tmplFile        => 'newitems.tmpl',
        }
);
my $sortAttr = $input->{'sortAttr'};
my $debugstr="";
$template->param(sortAttr => $sortAttr,);
my  $awsId =Opals::Context->preference('amazonId');
my  $awsSecretKey =Opals::Context->preference('amazonSecreteKey');
my  $syndeticsId =Opals::Context->preference('syndeticsId');
my  $showLocation =Opals::Context->preference('showLocation');
if($syndeticsId && $syndeticsId ne''){$awsId ="";}

my $formatMsgMap  =loc_getMsgFile('search/facet.msg',{});
# Cookie::sortOrder
my $sortAttr    = $input->{'sortAttr'};
my $sortOrder   = $input->{'sortOrder'};

if(!defined $sortOrder || $sortOrder eq '' ) { $sortOrder =1;}
$template->param(sortOrder => $sortOrder,sortAttr => $sortAttr,
                "sortAttr_$sortAttr"=>1 ,
                 sortDown  => ($sortOrder && $sortOrder == 1)  ? 0 : 1);

 
    my $pSize = 10;
    my $curPage= $input->{'pNum'};
    $curPage= 1 if ( !$curPage );

    my $dateToday = date_f005();
    $dateToday =~ s/([\d]{4})([\d]{2})([\d]{2})[\d]+\.(0|1)/$1-$2-$3/;
    
    $template->param(newItems=> 1);
    $template->param(bibliography=> 1);
     
    my $selNumOfDays = 30;
    if (scalar ($input->{'range'}>0)){
      $selNumOfDays =$input->{'range'};   
    }
    else{
        $input->{'range'}=$selNumOfDays;
    }
    my $isbnList="";

    my $rs  = GetNewItems($dbh, $input, $curPage, $pSize);
    my ($resultSize,$result) = ($rs->{'hits'},$rs->{'recordList'});
    if($resultSize >0){
        mapFacetMsg($rs->{'facet'});  
        addToggleAnchor2FacetList($rs->{'facet'});
    }

    
    getBookCover($result);
my $offset = ($curPage - 1) * $pSize ;
    my $recRsPos =$offset;
    foreach my $record (@$result) {
            my $isbnTmpList="";
            if($record->{'isbn'}){
                $isbnTmpList .=join (",",@{$record->{'isbn'}}) . ",";
            }
            $isbnList .=$isbnTmpList;
            $record->{'isbnList'}=$isbnTmpList;
            $record->{'recRsPos'}=$recRsPos++;
            $record->{'callNum1St'} =~ s/\s/<br>/g
    }

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

$template->param(
        facet        => $rs->{'facet'},
        result       => $result,
        pNum         => $curPage,
        selNumOfDays => $selNumOfDays,
        rangedPageList      => \@rangedPageList,
        resultSize          => $resultSize,
        sortCallNum1st      => ($sortAttr == 5001)              ? 1 : 0,
        sortTitle           => ($sortAttr == 4)                 ? 1 : 0,
        sortAuthor          => ($sortAttr == 1003)              ? 1 : 0,
        sortPubDateSort     => ($sortAttr == 31)                ? 1 : 0,
        sortOrder           => $sortOrder,
#        sortable            => (1<$resultSize && $resultSize<160) ? 1 : 0,
        showAmazonCover          => ($awsId && $awsId ne '')  ?1:0,
        showSyndeticsCover => ($syndeticsId && $syndeticsId ne '')  ?1:0,
        showLocation        =>($showLocation eq '1')?1:0,
        newItemsPage=>1,
        hlpUrl     => Opals::Constant->getHlpUrl("newitems")
 );
    setSearchFormFilter();
 my $pageNavForm =rinfo_getPageNavForm_search($cgi);
    $template->param(pageNavForm=>$pageNavForm,
                     );

#Tue, Jan 05, 2010 @ 15:26:57 EST
my $msgValMap ={searchResultMsgtxt=>{resultSize=>$resultSize}};

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

tmpl_write($dbh, $cgi, $cookie, $template);
#$dbh->disconnect();
################################################################################
sub GetNewItems{
    my ($dbh,$input, $curPage, $pSize) = @_;
    
    my $offset = ($curPage - 1) * $pSize ;
    my $periodDays = 30;
    if (scalar ($input->{'range'}>0)){
      $periodDays =$input->{'range'};   
    }
    my $today = date_today();
    my ($year,$month,$day) = $today->date();
    my $todayStr = sprintf("%04d-%02d-%02d",$year,$month,$day);

    my $expiryDate = $today ;
    my $dateImport = $today + [0,0,-1*$periodDays];
      ($year,$month,$day) = $expiryDate->date();
    my $expiryDateStr = sprintf("%04d-%02d-%02d",$year,$month,$day);
      ($year,$month,$day) = $dateImport->date();
    my $dateImportStr = sprintf("%04d-%02d-%02d",$year,$month,$day);
    $input->{'expiryDate'}=$expiryDateStr;
    $input->{'importDate'}=$dateImportStr;
    my $lQuery=slr_buildSNewItemQuery($input);
    my $rs=undef;
    $rs = slr_search({lQuery=>$lQuery,recFormat=>'brief',
                             sortAttr=>$sortAttr,sortDir=>$sortOrder,
                             offset=>$offset,size=>$pSize,
                             incCircStatus=>1});  


    return $rs;
}

#=======================================================
sub getBookCover{
    my($recList)=@_;
    my  $awsId =Opals::Context->preference('amazonId');
    my  $awsSecretKey =Opals::Context->preference('amazonSecreteKey');
    my  $syndeticsId =Opals::Context->preference('syndeticsId');
    if($syndeticsId ne''){
        bookCover_syndetics($recList);
    }
    elsif($awsId ne '' && $awsSecretKey ne ''){
        bookCover_amazon($recList,$awsId,$awsSecretKey);
    }
    else{
        $size='m' if($size eq 'mc');
        bookCover_google($recList);
    }

}
#=======================================================
sub mapFacetMsg{
    my ($facet)=@_;
    foreach my $fa(@$facet){
        $fa->{'fieldTxt'} =$formatMsgMap->{$fa->{'field'}};
        $fa->{'hasIcon'}=1 if($fa->{'field'} eq 'format');
        foreach my $item(@{$fa->{'facetList'}}){
            if($fa->{'field'} =~ m/format|language/){
               $item->{'facetTxt'}=$formatMsgMap->{$item->{'facet'}};
               if($item->{'facetTxt'} eq''){
                    $item->{'facetTxt'}="undefined" ;
                    $item->{'facet'}='undef';
               }
            }
            else{
                $item->{'facetTxt'}=$item->{'facet'};
                if($fa->{'field'} eq 'dewey'){
                    $item->{'facetDesc'} =getDeweyDesc($item->{'facet'});
                }
            }
        }
        @{$fa->{'facetList'}} =sort{$a->{'facetTxt'} cmp $b->{'facetTxt'}} @{$fa->{'facetList'}};
    }
    
}
#=======================================================
sub addToggleAnchor2FacetList{
    my ($facet)=@_;
    my $facetToggleId=0;
    foreach my $fa(@$facet){
        if(scalar(@{$fa->{'facetList'}}>16) ){
            splice @{$fa->{'facetList'}}, 10, 0, {facet=>"",
                                                  toggleMore=>1,
                                                  facetToggleId=>$facetToggleId};
            push @{$fa->{'facetList'}},{facet=>"",
                                        toggleLess=>1,
                                        facetToggleId=>$facetToggleId};
            $facetToggleId++;
        }
    }

}
#=======================================================
sub getDeweyDesc{
    my ($d)=@_;
    my $deweyDesc=undef;
    if($d =~ m/(^[0-9]+(\.[0-9]+){0,1}).*/){
        my $dewey=$1;
        my($dewey_100,$dewey_10,$dewey_int)=(floor($dewey/100)*100,floor($dewey/10)*10,floor($dewey));
        my $sth=$dbh->prepare(<<_SQL_);
        select description from opl_deweyDesc 
        where dewey=? 
             or(dewey_decimal=0 && dewey <=? && (dewey_100=? or dewey_10=? or dewey_int=? )) 
       order by dewey desc limit 1 ;
_SQL_
        $sth->execute($dewey,$dewey_int,$dewey_100,$dewey_10,$dewey_int);
        if(my ($desc)=$sth->fetchrow_array){
            $deweyDesc=$desc;
        }
        $sth->finish;
    }
    return $deweyDesc;
}
#=======================================================
sub setSearchFormFilter{

    my $formatMsgMap  =loc_getMsgFile('search/facet.msg',{});
    my $refineFilter=[];
    my @fieldArr =qw(language format author subject dewey era genre callnumberPrefix);
    foreach my $f(@fieldArr){
        if($input->{$f .'Filter'} ne ''){
            my $fTxt = $formatMsgMap->{$f};
            my $fVal=$input->{$f .'Filter'};
            $fVal= $formatMsgMap->{$fVal} if($f =~ m/language|format/gi);
            push @$refineFilter,{field=>$fTxt,value=>$fVal ,filter=>$f .'Filter'};
        }
    }
    $template->param(refineFilter => $refineFilter);
}
   


