#!/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
    srch_zDatabase
);
use Opals::Locale qw(
    loc_getMsgFile
    loc_write
);
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        => 'search/zimport.tmpl',
            reqPermission   => 'marc_edit|tb_record_edit',
        }
);
my $self = $ENV{'SCRIPT_NAME'};
my @cookieList = (@$cookie);

my $bid= $input->{'bid'};
$template->param(bid => $bid);


# 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'};
if(!defined $zid || $zid !~ m/^[\d]+$/ || $zid < 0){
    $zid =getDefaultZid($dbh,$cgi);
}

if($zid>=0){
    push @cookieList, $cgi->cookie(-name => 'zimport_id', -value => $zid,);

}
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;
my $msgValMap={} ;

my $stdMsgMap  =loc_getMsgFile('search/zimport.msg',$msgValMap);
loc_write($template,$stdMsgMap);

my $zdb = srch_zDatabase($dbh, $zid);
$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;
    if ($zdb->{'host'} =~ m/libnet\.ac\.il/) {
        $input->{$kw} = decode_utf8($input->{$kw});
    }
    # 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) {
            $sTerm =~ s/\@attr 4=2 //g if($input->{$sfOrder} eq '12');
            if ($pqf) {
                $pqf = "\@$input->{$boolop} $pqf \@attr 1=$input->{$sfOrder} $sTerm";
            }
            else {
                $pqf = "\@attr 1=$input->{$sfOrder} $sTerm";
            }
        }
    }
}
$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'));

if ($resultSize == -1) {
    $template->param(
        err_code    => $result->[0]->{'err_code'},
        err_mesg    => $result->[0]->{'err_mesg'},
    );

    $resultSize = undef;
    $result = undef;
}
else {
    my $i = $offset;
    foreach my $rec (@$result) {
        $rec->{'resultId'} = $i;
        $i++;
    }

    my $pRange = 10;
    my @rangedPageList = tmpl_rangedPageList($resultSize, $curPage, $pSize, $pRange);
    $template->param(
        rangedPageList  => \@rangedPageList,
    );
}
#my @exclusiveResultSize = srch_exclusiveResultSize($dbh, $zid, $pqf);

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

);

$template->param(
    zid => $zid,
    #zid => "1",
    kw0 => (($self eq $template->param('url_srchAdv')) ? '' : $input->{'kw0'}),
    pqf => $pqf,
    zimport => ($ENV{'REQUEST_URI'} =~ m/\/bin\/search\/zimport/) ? 1 : undef,
    tbzimport => ($ENV{'REQUEST_URI'} =~ m/\/bin\/txtbk\/zimport/) ? 1 : undef,
);

push @cookieList, $cgi->cookie(-name => 'term', -value => $input->{'kw0'});

$template->param(hlpUrl     => Opals::Constant->getHlpUrl('zimport') );

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

sub getDefaultZid{
    my($dbh)=@_;
    my $zid = 0;
    $cgi->cookie('zimport_id');
    if($cgi->cookie('zimport_id') && $cgi->cookie('zimport_id') =~ m/^[\d]+$/){
        $zid =$cgi->cookie('zimport_id');
    }
    else{
        my $sth= $dbh->prepare("select zid from opl_zDatabase where zid >0 limit 1");
        $sth->execute();
        if(my $rec =$sth->fetchrow_hashref){
            $zid=$rec->{'zid'};
        }
    }
    return $zid;
}


