#!/usr/bin/perl

#use utf8;
use strict;
use CGI;
use Text::CSV_XS;
use Digest::SHA qw(
    sha1_base64
    sha1_hex
);

use Opals::Context;
use Opals::Template_ajax qw(
    tmpl_read
    tmpl_write
    tmpl_preference
);
use Opals::BarcodeMgmt qw(
    bcm_validateBc
);
use Opals::Date qw(
    date_f005
);
use JSON;
use Opals::Session qw(
    SessionHdl_getSSID
    SessionHdl_add
    SessionHdl_exist_bc
    SessionHdl_count
);
use  Opals::Circulation qw{
    circ_getItemOnLoan
};


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

my $cgi          = CGI->new;
my $input        = $cgi->Vars();
my $task  = $input->{'task'};
my $filterLoan= $input->{'filterLoan'};
my $ssVar  = (defined $input->{'ssVar'} && $input->{'ssVar'} ne '' )? $input->{'ssVar'}:"hitList_$task";
my $ssid   = SessionHdl_getSSID($cgi);
my $ssidCookie=CGI::Cookie->new(-name=>'globalSessionID',-value=>$ssid);

my $syspref     = tmpl_preference($dbh);
my $validateBc  = $syspref->{'validateBarcode'};
my $barcodeType = $syspref->{'barcodeType'};

my $fname  = $input->{'bcFile'};
my $fdata  = $cgi->param('bcFile');

    my $rs = getFile();

    print "Set-Cookie: $ssidCookie\n";
    print "Content-type: text/plain\n\n";
    print  encode_json($rs);

   #-------------------------------------------------------------
    sub getFile{

        my $upload_filehandle=$cgi->upload("file")||$fdata;
        my @loanList=();
        my $loan=undef;
        my $numBc_fromFileScan=0;
        my $numBc_add2Session=0;
        my $numBc_invalid=0;
        my $numlBc_existedInSession=0;
        while(<$upload_filehandle>) {
            $_ =~ s/\n|\r//g;
            my $bc=$_;
            my $rid=undef;
            next if($bc eq'');
            $numBc_fromFileScan++;
            ($rid,$bc)     =validateBarcode($dbh,$bc);
            if($bc){
                if($filterLoan ne 'true' || !circ_getItemOnLoan($dbh,$bc)){
                    if(!SessionHdl_exist_bc($dbh,$ssid, $ssVar,$bc )){
                        SessionHdl_add($dbh,$ssid, $ssVar, $rid,$bc,"");
                        $numBc_add2Session++;
                    }
                    else{
                        $numlBc_existedInSession++;
                    }
                }
                else{
                    push @loanList,$loan;
                }
            }
            else{
                $numBc_invalid +=1;
            }
        }
        my ($ridCount,$bcCount) =SessionHdl_count($dbh,$ssid,$ssVar);
        return  { numBc_fromFileScan    =>$numBc_fromFileScan,
                  numBc_add2Session     =>$numBc_add2Session+$numlBc_existedInSession,
                  numBc_invalid         =>$numBc_invalid,
                  numlBc_existedInSession=>$numlBc_existedInSession,
                 # loanRs                =>{loanList=>\@loanList,onLoanCount=>scalar(@loanList)}, 
                  loanRs                =>{onLoanCount=>scalar(@loanList)}, 
                  ssRs                  =>{ridCount=>$ridCount,bcCount=>$bcCount}
                };

    }

   sub validateBarcode{
       my($dbh,$bc)=@_;
       my $rid=undef;
       $bc     = bcm_validateBc($dbh,$bc,$barcodeType) if($validateBc eq '1');
       ($rid,$bc)=$dbh->selectrow_array('select rid,barcode from opl_item where barcode=?',undef,$bc);
       return ($rid,$bc);
   }
#------------------------------------------------------------------------------
