#!/usr/bin/perl

#use utf8;
#use strict;

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

use CGI;
use JSON;
use Digest::SHA qw(
    sha512_base64
);

use Opals::Context;
use Opals::Constant;
use Opals::Log;
use Opals::Eq_SolrIndex;
use Opals::User qw(
    user_currentUserID
);
use Opals::Session qw(
    SessionHdl_clearVar
);
use Opals::Template qw(
    tmpl_read
    tmpl_write
);


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

my $cgi = CGI->new;
my $input = $cgi->Vars();
my $uIdInfo = user_currentUserID($dbh,$cgi);
my $itemTypeList = 
      

    my $data_json    = $input->{'data'};
    my $data = from_json($data_json);
    saveDataIntoTbl($dbh,$data);
    #this will move into module Equipment...
    #eq_ge_process($dbh);


print "Content-type: text/plain\n\n";
print to_json($data,{pretty=>1}); 

exit 0;

sub saveDataIntoTbl {

    my ($dbh,$params) = @_;
    my $sessionID = $cgi->cookie('globalSessionID');
    my $loginUId    = $uIdInfo->{'uid'} || 0;
    my $action = $params->{'action'};
    my $field =  $params->{'field'};
    my $o_data = $params->{'o_data'};
    my $n_data = $params->{'n_data'};
    my $o_code = $params->{'o_code'} || "";
    my $n_code = $params->{'n_code'} || "";
    my $ssVarName = $params->{'ssVarName'};
    my $status = "waiting";
    if ($action eq "update"){
        $o_code = $field;
        $n_code = $field;
    }
    my $digest    = sha512_base64(time . rand(time));
 
    my $sth = $dbh->prepare(<<_STH_);
select count(*) as count from opl_sessionVar where ssid=? && var='$ssVarName'
_STH_
    $sth->execute($sessionID);
    my ($c) =$sth->fetchrow_array;
    if(!$c || $c==0){
        return TRUE;
    }
    $sth = $dbh->prepare(<<_STH_);
insert into eq_geRequest (digest,uid, o_code, n_code, o_data, n_data, reqDate, action,status) 
values (?,?,?,?,?,?,now(),?,?)
_STH_
    $sth->execute($digest,$loginUId,$o_code,$n_code,$o_data,$n_data,$action,$status) || return FALSE;
    $sth->finish;
    
    my $newReqid;
    $sth = $dbh->prepare(<<_STH_);
select req_id from eq_geRequest
where digest=?
_STH_
    $sth->execute($digest) || return FALSE;
    ($newReqid) = $sth->fetchrow_array;
    $sth->finish;

    $sth = $dbh->prepare(<<_STH_);
insert into eq_geRecord (req_id ,rid,barcode) 
select distinct $newReqid, rid,barcode from opl_sessionVar 
where ssid=? && var='$ssVarName'
_STH_
    $sth->execute($sessionID) || return FALSE;
    $sth->finish;
     # ===== clear selected from session ======
    SessionHdl_clearVar($dbh,$sessionID,$ssVarName);

    return TRUE;
}


sub eq_ge_process {
    
    my ($dbh) = @_;
    my $sth = $dbh->prepare(<<_SQL_);
select * 
from    eq_geRequest 
where   status in ('waiting','processing') order by req_id
_SQL_

    my $sth_rid = $dbh->prepare(<<_SQL_);
select * 
from    eq_geRecord
where req_id = ? && status='waiting'
_SQL_
    
    $sth->execute();
    my ($req_id,$action);
    while (my $request = $sth->fetchrow_hashref){
        $req_id = $request->{'req_id'};
        $action = $request->{'action'};
        $sth_rid->execute($request->{'req_id'});
        my $record;
        while (my $rec = $sth_rid->fetchrow_hashref){
            push @{$record->{$rec->{'rid'}}};
        }
    }
}


