#!/usr/bin/perl

#use utf8;
use strict;

use Encode;
use LWP::UserAgent;
use HTTP::Request::Common;

use CGI;
use JSON;

use Opals::Context;
use Opals::Constant;

use Time::localtime;

use Opals::Eq_SolrSearch;
use Opals::Eq_SolrSearch1;

use Opals::Template qw(
    tmpl_read
    tmpl_write
);

use Opals::Session qw(
    SessionHdl_getSSID
);

use Opals::Eq_Circulation qw(
    circ_getLoanListByRid
);

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

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

my ($permission, $cookieList, $template) = tmpl_read(
    {
        dbh             => $dbh,
        cgi             => $cgi,
        tmplFile        => 'eqmnt/ajax/report/searchHitList.tmpl',
    }
);
    my $ssid   = SessionHdl_getSSID($cgi);
    my $ssVarname = $input->{'sessionVar'};
    $input->{'sortAttr'} =  $input->{'sortAttr'} || 'eq_name';
    $input->{'sortDir'} = '1';
    $input->{'displayStyle'} = 'linear';
    my $rs = do_SolrSearch($input);
    my $list = getSessionHitList($dbh,$ssid,$ssVarname);
    my $loanList = getLoanList($dbh,$rs->{'recordList'});
    foreach my $r (@{$rs->{'recordList'}}){
       if ($list->{$r->{'barcode'}}){
         $r->{'selected'} = 1;   
       }
       if ($loanList->{$r->{'barcode'}}){
          $r->{'onLoan'} = 1;
       }
    }
    my $hits = $rs->{'hits'};
    $rs = to_json($rs->{'recordList'}, {pretty=>1});
    $template->param (
        result     => $rs,
        hits       => $hits, 
    );
tmpl_write($dbh, $cgi, $cookieList, $template);


sub do_SolrSearch {
    my ($input) = @_;
    open debug, ">/tmp/S"; 
    print debug "input:", to_json($input,{pretty=>1}),"\n"; 
    return undef if ($input->{'kw'} eq "" && $input->{'kw1'} eq "" && $input->{'kw2'} eq "" && $input->{'kw3'} eq "");
    $input->{'groupBy'} = "barcode";
    my $eq_solr = Opals::Eq_SolrSearch1->new(dbh=>$dbh);
    #my $eq_solr = Opals::Eq_SolrSearch->new(dbh=>$dbh);
    my $lQuery = $eq_solr->eq_slr_srchQuery($input);
    print debug "lQuery : $lQuery \n";
    my $params={
        lQuery=>$lQuery,
        displayStyle=>'linear',
    };
    my $rs = $eq_solr->eq_slr_search1($params);
    print debug "rs", to_json($rs,{pretty=>1}),"\n";
    close debug;
    return $rs;
}
sub getSessionHitList{
    my ($dbh,$ssid,$vaName)=@_;
    my $itemList=[];
    my $hitList = {};
    my ($ridCount,$bcCount)=(0,0);
    my $sql ="select rid, barcode ";
    $sql .= "  from opl_sessionVar s ";
    $sql .= " where ssid= ? && var=? order by sOrder";
    my $sth =$dbh->prepare($sql);
    $sth->execute($ssid,$vaName);
    while( my $item=$sth->fetchrow_hashref){
        $hitList->{$item->{'barcode'}}=1;
    }
    return $hitList;
}

sub getLoanList {
    my ($dbh,$rList)=@_;
    my $h = {};
    my $ret = {};
    foreach my $r(@$rList){
        if (!$h->{$r->{'rid'}}){
           foreach my $a (@{ circ_getLoanListByRid($dbh,$r->{'rid'})}){
               $ret->{$a->{'barcode'}} = 1;
           }
        }
    }
    return $ret;
}
