#!/usr/bin/perl

#use utf8;
use strict;
use CGI;

use Time::localtime;
use Opals::Context;
use Opals::Template qw(
    tmpl_read
    tmpl_write
    tmpl_preference
);

use Opals::User qw(
    user_getInformationById
);

use Opals::Tb_Circulation qw(

    circ_getItemStatus
    circ_getItemInfo
    circ_declareLost
    circ_record_ODL
);

#circ_cancelHoldByRid
#circ_cancelHoldByRid
#circ_cancelReserveByRid

use Opals::Constant;

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

my $cgi      = CGI->new;
my $input    = $cgi->Vars();
my ($permission, $cookie, $template) = tmpl_read(
    {
        dbh             => $dbh,
        cgi             => $cgi,
        tmplFile        => 'txtbk/ajax/circ/lost.tmpl',
        reqPermission   => 'tb_circ_loan',
    }
);

my $dateDue;
my $tm = localtime;
my $todayTimeStr = sprintf("%04d-%02d-%02d %02d:%02d:%02d",$tm->year+1900, ($tm->mon)+1, $tm->mday,$tm->hour, $tm->min,$tm->sec);

my $syspref = tmpl_preference($dbh);

if ($permission && $permission->{'tb_circ_loan'}) {
    my @lostRSList=();
    my @bcArr = split /,/,$input->{'bcList'};
    foreach my $barcode(@bcArr){
        $barcode    =~ s/^\s+|\s+$//g;
        my $lost_odl_id=0;
        my $lostMsgCode="";
        my $itemCircStatus = circ_getItemStatus($dbh,$barcode );
        my $uid =$itemCircStatus->{'l_uid'};
        my $itemInfo = circ_getItemInfo($dbh,$barcode, $uid);
        my ($lostUser, $guardian) = 
                user_getInformationById($dbh, $itemCircStatus->{'l_uid'});
        # check if item exists
        if($itemCircStatus->{'status'} == IT_STAT_NOEXIST){
            $lostMsgCode="02";
        }
        # check if item is already marked as lost
        elsif($itemCircStatus->{'status'} == IT_STAT_LOST){
            $lostMsgCode="03";
        }
        else{
            # record lost if item is currently on loan
            if($itemCircStatus->{'status'} == IT_STAT_ONLOAN){
                $lost_odl_id = circ_record_ODL($dbh,$itemCircStatus->{'l_idLoan'},'lost',0);
            }
            # cancel hold or reserve if any...
            if($itemCircStatus->{'status'} == IT_STAT_ONHOLD){
                #circ_cancelHoldByRid($dbh,$itemInfo->{'rid'});
            }
            if($itemCircStatus->{'status'} == IT_STAT_HAVE_RSVR){
                #circ_cancelReserveByRid($dbh,$itemInfo->{'rid'});
            }
            circ_declareLost($dbh,$barcode);
            $lostMsgCode="01";
        }
        push @lostRSList,{
                            uid        =>$itemCircStatus->{'l_uid'},
                            lid        =>$itemCircStatus->{'l_idLoan'},
                            lostMsgCode  =>$lostMsgCode,
                            lost_odl_id  =>$lost_odl_id,
                            rid        => $itemInfo->{'rid'},
                            barcode    => $barcode,
                            title      => $itemInfo->{'title'},
                            author     => $itemInfo->{'author'},
                            pubName    => $itemInfo->{'pubName'},
                            pubDate    => $itemInfo->{'pubDate'},
                            callNumber => $itemInfo->{'classNumber'},
                            price      => $itemInfo->{'price'},
                            lostdate    => $todayTimeStr,
                            firstname   =>  $lostUser->{'firstname'},
                            lastname    =>  $lostUser->{'lastname'}
                        };
     }
    $template->param(lostRSList=>\@lostRSList);
}

tmpl_write($dbh, $cgi, $cookie, $template);
#-------------------------------------------------------------------------------------------
