#!/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::Eq_SolrSearch;
use Opals::Log;

use Opals::Template qw(
    tmpl_read
    tmpl_write
);

use Opals::Equipment qw(
 
    eq_record_findByRId
    eq_categoryMapList
);

use Opals::Eq_Circulation qw(
    
    circ_infoRecord
    circ_getItemInfo
    circ_getItemStatus
);
use Opals::User qw(
    user_currentUserID
);

use Opals::Eq_SolrIndex;

use Opals::Constant;

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/getRecords.tmpl',
            #reqPermission   => 'eq_record_edit',
        }
    );
        
        #open debug, ">/tmp/debugEQGetRecords";
        my $uIdInfo = user_currentUserID($dbh,$cgi);
        my $ridList = $input->{'ridList'};
        my @rids = split(/,/,$ridList);
        my @fl = $cgi->param('selFields');
        my @list=();
        my $categoryList = eq_categoryMapList($dbh);
        
        my $eq_solr = Opals::Eq_SolrSearch->new(dbh=>$dbh);
        my($sHost,$sPort,$sDatabase) = $eq_solr->eq_getSolrSrvInfo();
        my $lQuery = $eq_solr->eq_slr_buildQuery_recordList_json($input);
        my $url="http://$sHost:$sPort/solr/$sDatabase/select?$lQuery";
        my $timeout = 600;
        my $userAgent = LWP::UserAgent->new(agent   => 'OPALS', timeout=>$timeout);
        my $request = HTTP::Request->new(GET => $url); 
        my $response = $userAgent->request($request );
        my $json = $response->content;
        $json =~   s/<\?xml version="1.0" encoding="UTF-8"\?>//;
        my $tmpJson = decode_json($json);
        my @list = @{$tmpJson->{'response'}{'docs'}};
        foreach my $l(@list) {
            my @category = @{$l->{'category_facet'}};
            foreach my $c(@category){
                if ($l->{'category'} && $l->{'category'} ne ""){
                    $l->{'category'} .= ","
                }
                $l->{'category'} .= $categoryList->{$c};
                my $itm = circ_getItemStatus($dbh,{barcode=>$l->{'eq_barcode'}});
                $l->{'itemStatus'} = getStyleByStatus($itm->{'status'});
                $l->{'itemStatusDetail'} = $itm;

        }
    }
    #close debug;
    $json = encode_json($tmpJson);
    $template->param (
        json => $json,
    );
    #log...
    my $log = Opals::Log->new(dbh=>$dbh);
    my $content_log = to_json($input, {pretty=>1});
    my $params = {
        module      => "eqmnt",
        uid         => $uIdInfo->{'uid'} || 0,
        sessionid   => $uIdInfo->{'sessionid'} || "",
        action      => "listEditor",
        content     => $content_log
    };
    #$log->log($params);

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

sub getStyleByStatus {
     
    my ($statusCode) = @_;

    my ($itemStatus) = ('available');
    if($statusCode == 2){
        ($itemStatus) = ('reserved');
    }
    elsif($statusCode == 3){
        ($itemStatus) = ('on loan');
    }
    elsif($statusCode == 4){
        ($itemStatus) = ('overdue');
    }
    elsif($statusCode == 5){
        ($itemStatus) = ('on hold');
    }
    elsif($statusCode == 7){
        ($itemStatus) = ('lost');
    }
    elsif($statusCode == 8){
        ($itemStatus) = ('damage');
    }
    elsif($statusCode == 10){
        ($itemStatus) = ('restricted');
    }
    elsif($statusCode == 11){
        ($itemStatus) = ('missing');
    }
   
   return ($itemStatus) ;
}

