#!/usr/bin/perl

#use utf8;
use strict;
use CGI;
use Digest::SHA qw(
    sha1_base64
    sha1_hex
);
use POSIX qw(
    ceil
    floor
);
use Opals::Context;
use Opals::Template_ajax qw(
    tmpl_read
    tmpl_write
    tmpl_preference
);
use Opals::Locale qw(
    loc_getMsgFile
    loc_write
);
use Opals::Rating qw(
    cmntRating_getAvgRating
    cmntRating_numOfRating
);
use Opals::BookCover qw(
    bookCover_getUrl
    bookCover_amazon
    bookCover_google
    bookCover_syndetics

);
use Opals::SolrIndex qw(
    slr_buildSNewItemQuery
    slr_search
);

use JSON;

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

my $cgi      = CGI->new;
my $input    = $cgi->Vars();
my ($permission, $cookie, $template) = tmpl_read(
    {
        dbh             => $dbh,
        cgi             => $cgi,
        tmplFile        => 'ajax/portlet/getNewItemList.tmpl',
        
    }
);
    my ($awsId,$awsSecretKey,$syndeticsId)=('','','');
    my  $showLocation   =Opals::Context->preference('showLocation');
    my $nItemShow       =$input->{'nItemShow'};
    my $fieldsShow      =$input->{'fieldsShow'};
    my $showBookCover   =$input->{'showBookCover'};
    my $src             =$input->{'srchPage'};
    if(!defined $nItemShow || $nItemShow eq '' || $nItemShow == 0){
        $nItemShow =10;
    }
    my $input={sortAttr=>'' , sortOrder=>'' , range=>365}; 
    my $pSize  = $nItemShow;
    my $offset      = 0 ;
    my $periodDays = 365;

    if (scalar ($input->{'range'}>0)){
      $periodDays =$input->{'range'};   
    }
    else{
        $input->{'range'}=$periodDays ;  
    }
    my $sortAttr  = $input->{'sortAttr'};
    my $sortOrder = $input->{'sortOrder'};
    if(!defined $sortAttr || $sortAttr eq '' ) {$sortAttr =9002; $sortOrder =1;}

    my $lQuery = slr_buildSNewItemQuery($input);
    my $rs=undef;

    $rs = slr_search({lQuery=>$lQuery,recFormat=>'briefNewItem',
                             sortAttr=>$sortAttr,sortDir=>$sortOrder,
                             offset=>$offset,size=>$pSize,
                             incCircStatus=>1}); 
    my $isbnList="";
    my ($recCount, $result) =($rs->{'hits'},$rs->{'recordList'});
    
   # $showBookCover = 'true';
    my $recRsPos =0;
    foreach my $record (@$result) {
            my $isbnTmpList="";
            if($record->{'isbn'}){
                $isbnTmpList .=join (",",@{$record->{'isbn'}}) . ",";
            }
            $isbnList .=$isbnTmpList;
            $record->{'isbnList'}=$isbnTmpList;
            $record->{'recRsPos'}=$recRsPos++;  
            $record->{'showBookCover_Y'}=1 if($showBookCover eq 'true'); 
            $record->{'showLocation'}= ($showLocation eq '1')?1:0;
    }
   getBookCover($result,"m");
   getRating($result);
   foreach my $record (@$result) {
        $record->{'bookcover'}= $record->{'bookcoverURL'},
        $record->{'callnumber'}= $record->{'callNum1St'},
   }
          
    if ($fieldsShow eq 'title'){
        $template->param(showBrief=>1);
    }
    else{
        $template->param(showDetail=>1);
    }
    if ($showBookCover eq 'true'){
        $template->param(showBookCover_Y=>1);
    }
    else{
        $template->param(showBookCover_N=>1);
    }
    my $rs={
        fieldsShow          => $fieldsShow,
        showBookCover       => $showBookCover,
        showAmazonCover     => ($awsId && $awsId ne '')  ?'true':'false',
        showSyndeticsCover  => ($syndeticsId && $syndeticsId ne '')  ?'true':'false',
        nItemShow           =>$nItemShow,
        searchPage          => ($src eq 'searchPage') ? 'true':'false',
        portalEdit          => ($src eq 'portalEdit') ? 'true':'false',
        newItemList         =>$result,
        showBrief          =>($fieldsShow  eq 'title')? 'true':'false',
        showDetail          =>($fieldsShow eq 'title')? 'false':'true'

       };

    my $json = to_json($rs,{pretty=>1});
    print "Content-type: text/plain\n\n";
    print $json;

################################################################################
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{
        bookCover_google($recList,'m');
    }

}
#////////////////////////////////////////////////////////////////////////////
sub getRating{
    my ($recList)=@_;
    my  $rating =Opals::Context->preference('rating'); 
    my $dbh = Opals::Context->dbh();

    if($rating && $rating ==2 ){
        foreach my $rec(@$recList){
            my $noReview  = cmntRating_numOfRating($dbh,$rec->{'rid'});
            my $avgRating = cmntRating_getAvgRating($dbh,$rec->{'rid'});
            my $numOfStars =floor($avgRating);
            my $fraction= $avgRating - $numOfStars ;
            if($fraction >0.25 && $fraction<0.75){
                $numOfStars += 0.5;
            }
            elsif($fraction >0.75){
                $numOfStars += 1;
            }

            my $avgRating = sprintf("%.2f", $avgRating);
            $rec->{'rateRec'} = $avgRating;
            $rec->{'numReview'} = $noReview;
            $rec->{'numOfStars'} = $numOfStars;
           }
    }
}

