#!/usr/bin/perl

#use utf8;
use strict;
use CGI;

use Opals::Context;
use Opals::Template qw(
    tmpl_read
    tmpl_write
);
use Opals::Search qw(
    srch_parseSearchTerm
    srch_searchRecord
    srch_infoLibrary
    srch_recordBrief
);
use Opals::Circulation qw(
    circ_infoRecord
);
use Opals::User qw(
    user_currentUser
);
use Opals::Marc21 qw(
    mc21_infoGeneral
);
use Opals::Session qw(
    SessionHdl_get
);
use Opals::BookCover qw(
    bookCover_getUrl
);

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        => 'record/info.tmpl',
        }
);

my $zid = $input->{'zid'};
($zid && $zid >= 0) || ($zid = 0);

my  $awsId =Opals::Context->preference('amazonId');
my  $awsSecretKey =Opals::Context->preference('amazonSecreteKey');
my  $syndeticsId =Opals::Context->preference('syndeticsId');
if($syndeticsId && $syndeticsId ne''){$awsId ="";}
my $rid = $input->{'rid'};
my $resultOrder = $input->{'resultOrder'};
my $direction   = $input->{'direction'};
my $srchPage = $input->{'srchPage'};
#$rid = undef if ($rid < 1);
# Cookie::sortAttr
my $sortAttr = $input->{'sortAttr'};
$sortAttr=undef if ($zid != 0);
$template->param(sortAttr => $sortAttr,);

# Cookie::sortOrder
my $sortOrder = $input->{'sortOrder'};
$template->param(sortOrder => $sortOrder,);


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



if (!$rid) {
    $template->param(
        error => 1,
    );
}
else {
    my ($sfOrder, $kw, $boolop);
    my @sInput;
    my $iCount = 0;
    foreach my $cgiInput (keys %$input) {
        $iCount++ if ($cgiInput =~ m/^sf/);
    }
    for (my $i = 0; $i < $iCount; $i++) {
        $sfOrder= 'sf' . $i;
        $kw     = 'kw' . $i;
        $boolop = 'boolop' . $i;
        # cleanup...
        #$input->{$kw} = fdgadfg
        push @sInput, {
            iOrder  => "$i",
            sOrder  => "$input->{$sfOrder}",
            sKw     => "$input->{$kw}",
            sBool   => $input->{$boolop},
        };
         if ($input->{$kw}) {
                $sTerm = srch_parseSearchTerm($input->{$kw});
                if ($sTerm) {
                    if ($pqf) {
                        $pqf = "\@$input->{$boolop} $pqf \@attr 1=$input->{$sfOrder} $sTerm";
                    }
                    else {
                        $pqf = "\@attr 1=$input->{$sfOrder} $sTerm";
                    }
=item                       
                    # field 880 -- Title
                    if($input->{$sfOrder} eq '4'){
                        my $ps ="\@and \@attr 1=8801 245 \@attr 1=8802 $sTerm";
                        $pqf   ="\@or $pqf $ps";
                    }
                    # field 880 -- Author
                    elsif($input->{$sfOrder} eq '1003'){
                        my $ps ="\@and \@attr 1=8801 100 \@attr 1=8802 $sTerm";
                        $pqf   ="\@or $pqf $ps";
                    }
                    # field 880 -- place of publication
                    elsif($input->{$sfOrder} eq '59'){
                        my $ps ="\@and \@attr 1=8801 260 \@attr 1=8802 $sTerm";
                        $pqf   ="\@or $pqf $ps";
                    }
                    # field 880 -- publisher 
                    elsif($input->{$sfOrder} eq '1018'){
                        my $ps ="\@and \@attr 1=8801 260 \@attr 1=8803 $sTerm";
                        $pqf   ="\@or $pqf $ps";
                    }
=cut                    
                }
            }
    }
    # Sort
    if ($pqf ne '' && $sortAttr && ($sortAttr == 4    ||  # Title
                      $sortAttr == 31   ||  # Date-publication
                      $sortAttr == 1003 ||  # Author-name
                      $sortAttr == 5001)) { # Call-number-local
        ($sortOrder && $sortOrder == 2) || ($sortOrder = 1);
        $pqf = "\@or $pqf \@attr 7=$sortOrder \@attr 1=$sortAttr 0";
    }
    

    my $pNum = $input->{'pNum'};
    ($pNum && $pNum > 0) || ($pNum = 1);

    
    if($srchPage eq 'beginner'){
        $template->param(beginnerSrch=>1);
    }
    elsif($srchPage eq 'advance'){
        $template->param(advanceSrch=>1);
    }
    else{
        $template->param(standardSrch=>1);
    }
        
    $template->param(
        stdSrch            => 1 ,
        sInput      => \@sInput,
        sortAttr    => $input->{'sortAttr'},
        sortOrder   => $input->{'sortOrder'},
        pNum        => $pNum,
        resultOrder      => $input->{'resultOrder'},
    );
    # See Search.pm for more info.
#    my @searchField = srch_searchField();
#    my $pqf = "\@attr 1=$searchField[7]->{attVal} $rid";
    if($pqf eq ''){
       $pqf = "\@attr 1=12 $rid";
    }
    my ($resultSize, $xml) = srch_searchRecord($dbh, $zid, 'f', $pqf, $resultOrder+$direction, 1, undef, $direction);
    my $isbnList="";
    if ($resultSize != 0) {
        my $amazonBookCover="";
        my $recBrief =srch_recordBrief($xml->[0]);
        
        if(($awsId ne "" || $syndeticsId ne "" )
            && $recBrief->{'isbn'} && $recBrief->{'isbn'} ne ''){

            $isbnList .=join (",",@{$recBrief->{'isbn'}}) . ",";
            if($awsId ne ""){
                my $bookCoverUrl= bookCover_getUrl($awsId,$isbnList,$awsSecretKey);
                foreach my $isbn(@{$recBrief->{'isbn'}}){
                     if($bookCoverUrl->{$isbn}->{'medium'}){
                        $amazonBookCover=$bookCoverUrl->{$isbn}->{'medium'};
                     }
                     elsif($bookCoverUrl->{$isbn}->{'small'}){
                        $amazonBookCover=$bookCoverUrl->{$isbn}->{'small'};
                     }
                }
            }
        }
        $rid=$recBrief->{'rid'};
        my %info = mc21_infoGeneral($xml->[0], $input->{'sysFilter'});
        my $recMedium = $info{'medium'};
        my ($numTotal, $numLoan, $numReserve, $numHold, $items,$totalCirc)
            = circ_infoRecord($dbh, $rid, $info{'itemList'});
        my $numAvailable = $numTotal - $numLoan - $numHold;

        if (Opals::Context->config('type')) {
            my ($lib, $sCode, $lCode);
            foreach my $holding (@{$info{'itemList'}}) {
                $sCode = $holding->{'sCode'};
                $lCode = $holding->{'lCode'};
                if ($lCode) {
                    if (!$lib->{$lCode}) {
                        $lib->{$lCode} = 
                            srch_infoLibrary($dbh, {sCode => $sCode, lCode=>$lCode});
                    }

                    if ($lib->{$lCode}) {
                        $holding->{'sName'} = $lib->{$lCode}->{'sName'};
                        $holding->{'lName'} = $lib->{$lCode}->{'lName'};
                    }
                }
            }
        }
        my $union852 = Opals::Context->preference('union852');
        $template->param(\%info);
        $template->param(
            idvalid      => 1,
            zid          => $zid,
            rid          => $rid,
            medium       => $recMedium,
            resultOrder  => $resultOrder+$direction,
            isFirst      => ((!$direction && $resultOrder == 0) || ($direction && $resultOrder+$direction == 0)),
            isLast       => ((!$direction && $resultOrder == $resultSize -1) || ($direction && $resultOrder+$direction == $resultSize -1)),
            numTotal     => $numTotal,
            numLoan      => $numLoan,
            totalCirc      => $totalCirc,
            numReserve   => $numReserve,
            numHold      => $numHold,
            numAvailable => $numAvailable,
            items        => $items,
            amazonBookCover    => $amazonBookCover,
            syndeticsBookCover    => $syndeticsId,
            isbnList     => $isbnList,
            sysFilter    => $input->{'sysFilter'},
            dsplcode     => ($union852 == 1 || $union852 == 3) ? 1 : 0,
            dspllib      => ($union852 == 2 || $union852 == 3) ? 1 : 0,
            dsplUnion    => ($union852 == 3) ? 5 : (($union852 == 1 || $union852 == 2) ? 4 : 3),
        );
    }
    else {
        $template->param(
            idvalid      => 0
        );
    }
}

$template->param(
    reserveActive => ($permission->{'circ_rsrv'}) ? 1 : 0,
    #Ha 2006-12-20 
    reserveActive => ($permission->{'circ_rsrv_self'}) ? 1 : 0,
    
);

if ($permission && $permission->{'marc_edit'}) {
    $template->param(marc_edit => 1);
}
$template->param(bibliography => 1);

$template->param(
    kw0 =>  $input->{'kw0'},
);



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