#!/usr/bin/perl

#use utf8;
use strict;
use CGI;

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

use Opals::Template qw(
    tmpl_read
    tmpl_write
    tmpl_rangedPageList
    tmpl_searchFieldAdvance
);
use Opals::Search qw(
    srch_parseSearchTerm
    srch_searchRecord
    srch_exclusiveResultSize
    srch_zList
);

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

my $self = $ENV{'SCRIPT_NAME'};
my @cookieList = (@$cookie);
# Cookie::showpqf
my $showpqf = $input->{'showpqf'};
(defined $showpqf) || ($showpqf = $cgi->cookie('showpqf')) || ($showpqf = 0);
push @cookieList, $cgi->cookie(-name => 'showpqf', -value => $showpqf,);
$template->param('showpqf' => $showpqf,);

my $zid = $input->{'zid'};
($zid && $zid =~ m/^[\d]+$/ && $zid >= 0) || ($zid = 0);

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

#if ($self eq $template->param('url_itemstatus')) {
#    $template->param(msgItemStatus => 1);
#}
# advance/standard search, status is a link to standard search
my ($sfOrder, $kw, $boolop);
my @sInput;

$pqf = '';
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";
            }
        }
    }
}
#open HHH, '>/tmp/http_env';
#foreach my $k (sort keys %ENV) {
#    print HHH "$k: $ENV{$k}\n";
#}
#close HHH;
$template->param(
    sInput => \@sInput,
);

unless ($pqf) {
    if ($self eq $template->param('url_srchAdv')) {
        my @inputSearch = tmpl_searchFieldAdvance($dbh);
        $template->param(
            srchAdv => 1,
            inputSearch => \@inputSearch,
        );
    }
    goto _PRINT_CONTENT
}

my $pSize = 20;
my $curPage = $input->{'pNum'};
($curPage >= 1) || ($curPage = 1);
my $offset = ($curPage - 1) * $pSize + $ENV{'Z_INDEX_BASE'};
my ($resultSize, $result) = srch_searchRecord($dbh, $zid, 'b', $pqf, $offset, $pSize, $template->param('curUserId'));
my $i = $offset;
foreach my $rec (@$result) {
    $rec->{'resultId'} = $i;
    $i++;
}

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

#my @exclusiveResultSize = srch_exclusiveResultSize($dbh, $zid, $pqf);

_PRINT_CONTENT:
my @zServerList = srch_zList($dbh, 'stateList', $zid);
$template->param(
    bibliography        => (($zid == 0 && $#$result >= 0) ? 1:0),
    resultSize          => $resultSize,
    result              => $result,
    rec_start           => $offset +1,
    rec_end             => ($offset + 1 + $#$result),
    rangedPageList      => \@rangedPageList,
#    exclusiveResultSize => \@exclusiveResultSize,
    zServerList         => \@zServerList,
);

$template->param(
    zid => $zid,
    kw0 => (($self eq $template->param('url_srchAdv')) ? '' : $input->{'kw0'}),
    pqf => $pqf,
    zimport => 1,
);
push @cookieList, $cgi->cookie(-name => 'term', -value => $input->{'kw0'});

tmpl_write($dbh, $cgi, \@cookieList, $template);
#$dbh->disconnect();
