#!/usr/bin/perl

# This script is not finished.

#use utf8;
use strict;
use CGI;
use Encode;
use POSIX qw(
    ceil
    floor
);
use Opals::Context;
use Opals::Template qw(
    tmpl_read
    tmpl_write
    tmpl_preference
);
use Date::Calc::Object qw(
    :all
);


use Opals::BookCover qw(
    bookCover_getUrl
   bookCover_amazon
    bookCover_google
    bookCover_syndetics
);
use Opals::MarcXmlParser; 
use Opals::RecordInfoHTML qw(
    rinfo_getPageNavForm_search
);
use Time::localtime;

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

my $cgi = CGI->new;
my $input = $cgi->Vars();
my $op = $input->{'op'};
my $sessionID = $cgi->cookie('globalSessionID');
my ($permission, $cookie, $template) = tmpl_read(
        {
            dbh             => $dbh,
            cgi             => $cgi,
            tmplFile        => 'search/bgnrSrch/bibliography.tmpl',
            reqPermission   => (($op eq 'email')? 'email':'none'),
        }
);
my $tm = localtime;
my $todayStr = sprintf("%04d-%02d-%02d", $tm->year+1900, ($tm->mon)+1, $tm->mday);
my $pqf;
my  $awsId =Opals::Context->preference('amazonId');
my  $awsSecretKey =Opals::Context->preference('amazonSecreteKey');
my  $syndeticsId =Opals::Context->preference('syndeticsId');
if($syndeticsId && $syndeticsId ne''){$awsId ="";}
my $isbnList="";

my $pageNavForm =rinfo_getPageNavForm_search($cgi);
    $template->param(pageNavForm=>$pageNavForm);
#my $bibList = $cgi->cookie('bibList');
 #format bibList is :rid +"\t" + noteStr +"\n";
#$bibList =~ s/(^\n|\n$)//g;
my $zid = $input->{'zid'};
($zid && $zid >= 0) || ($zid = 0);
my @bibliography;
my $odd_row=1;
#-----------------------------
my ($summary,$callnumber,$contentNote);  
my ($title505,$resp505,$miscInfo505,$contFormat505);  
my @bibliography=getBibList($dbh,$sessionID);
    getBookCover(\@bibliography);
#-----------------------------
my $pref = tmpl_preference($dbh);

my $bibformat     = $cgi->cookie('bibformat');
($bibformat && $bibformat =~ m/^(apa|mla|shelf)$/i) || ($bibformat = $pref->{'bibformat'});
($bibformat && $bibformat =~ m/^(apa|mla|shelf)$/i) || ($bibformat = 'mla');

#Thu, Jan 29, 2009 @ 12:08:05 EST
    my $sortOrder0 = $input->{'sortOrder0'};
    my $sortOrder1 = $input->{'sortOrder1'};
    my $sortOrder2 = $input->{'sortOrder2'};
    my $sortOrder3 = $input->{'sortOrder3'};
    my @sortOrder=();
    if($sortOrder0 && $sortOrder0 ne ''){
         @sortOrder=($sortOrder3,$sortOrder2,$sortOrder1,$sortOrder0);
    }
    elsif($bibformat eq 'shelf'){
        @sortOrder=('pubDateSort','titleSort','author','callnumber');        
    }
    else{
        @sortOrder=('callnumber','pubDateSort','titleSort','author');
    }

    foreach my $sf (@sortOrder){
        @bibliography = sort {lc($a->{$sf}) cmp lc($b->{$sf})} @bibliography; 
    }
 #

if($op eq 'ppreview' || $op eq 'email'){
    my $sumformat = $input->{'sumformat'};
    $template->param( sumformat   => $sumformat,);
    my $contformat = $input->{'contformat'};
    $template->param( contformat   => $contformat,);
}
else{
    $template->param( sumformat   => 1,);
    $template->param( contformat   => 1,);
}


foreach my $bibInfo (@bibliography){
    $bibInfo->{'odd'}=$odd_row;
    $odd_row =$odd_row?0:1;
}
$template->param(
    todayStr => $todayStr,
    showAmazonCover     => ($awsId && $awsId ne '')  ?1:0,
    showSyndeticsCover  => ($syndeticsId && $syndeticsId ne '')  ?1:0,
    bibliography        => \@bibliography,
    nBib                => scalar(@bibliography),
    bibformatList       => [
        {
            val => 'mla',
            opt => 'MLA',
            sel => ($bibformat =~ m/^mla$/i) ? 1:0,
        },
        {
            val => 'apa',
            opt => 'APA',
            sel => ($bibformat =~ m/^apa$/i) ? 1:0,
        },
        {
            val => 'shelf',
            opt => 'Shelf',
            sel => ($bibformat =~ m/^shelf$/i) ? 1:0,
        },
    ],
    op_ppreview     => (($op eq 'ppreview') ? 1:0),
    op_email        => (($op eq 'email') ? 1:0),
    $bibformat      => 1,
    viewBib         => 1,

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

}

#-----------------------------------------------------------------------------
sub getBibList{
    my ($dbh,$sessionID)=@_;

    my @ridList=();
    my $sth=$dbh->prepare("select distinct rid,note as userNote from opl_sessionVar  
                         where var ='bibliography' && ssid= ? ");
    $sth->execute($sessionID);

    my $marcXmlParser=undef;
    my $indexConfFile  = Opals::Context->config('sIndexConfig');
    $marcXmlParser=Opals::MarcXmlParser->new($indexConfFile) if (!defined $marcXmlParser);
    while (my $bib=$sth->fetchrow_hashref){
        my $rid  = $bib->{'rid'};
        my $userNote = $bib->{'userNote'} ;
        my $fname=recordPath($rid)."/$rid.xml";
        $bib=$marcXmlParser->getRecInfoGeneral_file($fname);
        $bib->{'userNote'}      = encode('utf8',$userNote);
        $bib->{'callnum1St'}    = $bib->{'itemList'}[0]->{'callnumber'};
        $bib->{'rid'}           = $rid; 
        push @ridList, $bib;
    }
    $sth->finish;
    return @ridList;
}
#-----------------------------------------------------------------------------
sub recordPath {
    my ($rid) = @_;
    
    my $zRoot   = Opals::Context->config('zRoot');
    my $zPort   = Opals::Context->config('zPort');
    my $zDatabase = Opals::Context->config('zDatabase');
    my $dir     = "$zRoot/$zPort/record/$zDatabase/" . ceil($rid/1000);

    return $dir;
}

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

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