#!/usr/bin/perl

#use utf8;
use strict;
use CGI;
use JSON;

use Opals::Context;

use Opals::User qw(
    user_getInformationById
);

use Time::localtime;
use Opals::Equipment qw(
    eq_item_findByBarcode
    eq_item_findByRId
    eq_record_findByRId
    eq_def_colDisplayCount
);
use Opals::Eq_Circulation qw(
    circ_getUserListLoan
    circ_getUserLoanHistory
);

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

my $cgi = CGI->new;
my $input = $cgi->Vars();
my $tm = localtime;
my $todayStr = sprintf("%04d-%02d-%02d", $tm->year+1900, ($tm->mon)+1, $tm->mday);

my $uid = -1;
my $errUser = 0;

$uid=$input->{'uid'};
#my $odList = getOdList($dbh, $uid) ;
my $ret =  getUserCircInfo($dbh,$uid);
$ret->{'odList'} = getOdList($dbh, $uid) ;

print "Content-type: text/plain\n\n";
print   to_json( 
    $ret
);

#-------------------------------------------------------------
sub getOdList{
    my ($dbh,$uid)=@_;
    my $list = _getUserListOD($dbh,{uid=>$uid});
    return $list;
}
#-------------------------------------------------------------------------------- 
sub _getUserListOD{
    my ($dbh, $params) = @_;
    my $sth = $dbh->prepare(<<_STH_);
select  barcode,dateLoan,dateDue,cast((timestamp(now())-timestamp(dateDue)) as signed integer) as deltaDateDue from eq_loan where uid=? && dateReturn is null;
_STH_
    $sth->execute($params->{'uid'}) ;
    my @tmpList ;
    my @loanList;
    while (my $loan = $sth->fetchrow_hashref){
        $loan->{'overdue'} = $loan->{'deltaDateDue'} > 0? 1:0;
        push @tmpList, $loan;
    }
    foreach my $loan (@tmpList){
        my $itemInfo = Opals::Equipment::eq_item_findByBarcode($dbh, $loan->{'barcode'}, 1);
        if ($itemInfo) {
            push @loanList, {
                barcode     => $loan->{'barcode'},
                dateLoan    => $loan->{'dateLoan'},
                dateDue     => $loan->{'dateDue'},
                overdue     => $loan->{'overdue'},
                rid         => $itemInfo->{'rid'},
                rname       => $itemInfo->{'rname'},
                fields      => $itemInfo->{'fields'}
            };
        }
    }
    $sth->finish;
    return \@loanList;
}
#--------------------------------------------------------------------------------  
sub getUserCircInfo{
    my ($dbh, $uid) = @_;
    my $userInfo=undef;
    my ($user, $guardian) = user_getInformationById($dbh, $uid);
    if(defined $user){
        $userInfo={};
        foreach my $f (qw(uid userbarcode username firstname lastname nickname homeroom teacher grade program studies notes status expired categorycode email)){
            $userInfo->{$f}=$user->{$f};
        }
    }
    my $userCircInfo = {'info'=> $userInfo };
    $userCircInfo->{'loanList'}= circ_getUserListLoan($dbh, {uid=>$uid});
    $userCircInfo->{'loanHistoryList'}    = circ_getUserLoanHistory($dbh, {uid=>$uid});
    
    return $userCircInfo;
}

