#!/usr/bin/perl

#use utf8;
use strict;
use CGI;

use Opals::Context;#use MARC::File::USMARC;
#use MARC::File::XML;

use Opals::Template_ajax qw(
    tmpl_read
    tmpl_write
);

use Opals::BookCover qw(
    bookCover_getUrl
    bookCover_amazon
    bookCover_google
    bookCover_syndetics
);
use Opals::SolrIndex qw(
    slr_getShelfList
);
my $dbh = Opals::Context->dbh();
END { $dbh->disconnect(); }

my $cgi = CGI->new;
my $input = $cgi->Vars();

my $ssid   = $cgi->cookie('globalSessionID');
my $rid         = $input->{'rid'};
my $inclusive   = $input->{'inclusive'}||0;
my $size        = $input->{'size'}||10;
my $dir         = $input->{'dir'};
my $ssType      = $input->{'ssType'};

my $hitList={};
if($rid){
    $hitList = getHitlist($dbh,$ssType,$ssid,$rid,$dir,$size,$inclusive);
    getBookCover($hitList->{'itemList'});
}

    my ($permission, $cookie, $template) = tmpl_read(
    {
        dbh             => $dbh,
        cgi             => $cgi,
        tmplFile        => 'ajax/marc21/getBookList.tmpl',
        reqPermission   => 'circ_loan',
    });
    foreach my $k(keys %$hitList){
        $template->param($k => $hitList->{$k});
    }
    tmpl_write($dbh, $cgi, $cookie, $template);




 
    #--------------------------------------------------------------------------
sub getHitlist{
    my($dbh,$ssType,$ssid,$rid,$dir,$size,$inclusive)=@_;
    my $ret={total=>0,rangeFrom=>0,rangeTo=>0,itemList=>[]};
    my $hitlist= [];

    my  $sth_c=$dbh->prepare("select count(distinct rid) from opl_sessionVar where var =?  
                && ssid = ?");
    $sth_c->execute($ssType,$ssid);
    my ($total)=$sth_c->fetchrow_array();
    if(!$total){
        return $ret;
    }
    $sth_c=$dbh->prepare("select count(distinct rid) from opl_sessionVar where var = ?  
                && ssid = ? && sOrder<= (select sOrder from opl_sessionVar where var = ?  
               && ssid = ? && rid=? order by sOrder)");
    $sth_c->execute($ssType,$ssid,$ssType,$ssid,$rid);

    my ($offset)=$sth_c->fetchrow_array();
    if($dir eq 'left'){
        return $ret if($offset==1 && !$inclusive );
        if($offset <$size){
             $size =$offset ;
             $size =$size -1 if(!defined $inclusive || !$inclusive);
             $offset=0;
        }
        else{
            $offset -=$size;
            $offset -=1 if(!defined $inclusive || !$inclusive);
        }
    }
    elsif($dir eq 'right'){
         $offset -=1 if(defined $inclusive && $inclusive);
    }
    else{
        if($offset <=$size){
            $size +=$offset;
            $offset=0;
        }
        else{
            $offset =$offset - $size -1;
            $size *=2;
        }
        
    }

     my $sql = "select  m.rid,m.title,m.author,m.pubDate,i.data isbn_first ,h.callNumber ,if(s.note='saved','true','false') saved
     from   opl_marcRecord m inner join opl_sessionVar s using(rid) inner join opl_item h using(rid)
            left outer join opl_recordIdentifier i on i.rid=s.rid && i.tag ='020' && i.code='a' 
     where s.var=?  && s.ssid = ?  
     group by    s.rid  order by    s.sOrder limit ?,?";

     my $sth=$dbh->prepare($sql);
     $sth->execute($ssType,$ssid,$offset,$size);

   
    while (my $rec = $sth->fetchrow_hashref){
        $rec->{'curEdit'}= 'true' if($rec->{'rid'} == $rid);
        push @$hitlist, $rec;
    }
    $sth->finish;
    $ret->{'total'}=$total;
    $ret->{'rangeFrom'}=$offset+1;
    $ret->{'rangeTo'}  =$offset+ scalar(@$hitlist);
    $ret->{'itemList'}  =$hitlist;
    return $ret;
}

#=======================================================
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);
    }

}

#---------------------------------------------------------------------------------------




