#!/usr/bin/perl

#use utf8;
use strict;
use CGI;
use Encode;
use PDF::Create;
use POSIX qw(
    floor
);

use Opals::Context;

use Time::localtime;

use Opals::Date qw(
    date_parse
    date_today
    date_text
    date_f005
);

use Opals::Template qw(
    tmpl_read
    tmpl_write
    tmpl_preference
);
use constant    X_PAGE        =>  612;
use constant    X_LEFT_MARGIN =>  25;
use constant    Y_PAGE        =>  792;
use constant    X_TABLE       =>  558;
use constant    ROW_HEIGHT    =>   18;

use Opals::Locale qw(
    loc_getMsgFile
    loc_write
    
);

use Opals::Mail qw(
    mail_enqueueMail
);
use Opals::Report qw(
    rpt_onloanList
    
);
my $dbh = Opals::Context->dbh();
END { $dbh->disconnect(); }

my $cgi = CGI->new;
my $input = $cgi->Vars();
my $pref = tmpl_preference($dbh);
my $libname = decode('utf8', $pref->{'libname'});
my $dateToday = date_f005();
my $todayStr;

 
#----------------------------------------------------------------------------------------------------

my ($permission, $cookie, $template) = tmpl_read(
        {
            dbh             => $dbh,
            cgi             => $cgi,
            tmplFile        => 'circ/odemail.tmpl',
            reqPermission   => 'notice',
        }
    );
    
    my $subject = $input->{'eSubject'};
    my $msg     = decode('utf8',$input->{'msg'});
    my $pref    = tmpl_preference($dbh);
    my $contArr ;

    my $itemOnLoanMsgMap =loc_getMsgFile('circ/notice.msg');
    if ( $input->{'list'} ){
        $contArr = getHTMLContent($dbh,$cgi,$input); 
    }
    
    if(scalar(@$contArr)>0){
        saveContent2Tbls($dbh,$contArr,$subject);
    }

    loc_write($template,$itemOnLoanMsgMap);
    tmpl_write($dbh, $cgi, $cookie, $template);

#--------------------------------------------------------
sub getHTMLContent{
    my($dbh,$cgi,$input)=@_;
    my $sort1    = $input->{'sort1'};
    my $sort2    = $input->{'sort2'};
    $sort2    ='dewey' if($sort2 eq 'callNumber');
    my $reportGroup;
    if($pref->{'reportGroup'} == 1 ){
        $reportGroup = "homeroom";
    }
    elsif($pref->{'reportGroup'} == 2 ){
        $reportGroup = "teacher";
    }
    elsif($pref->{'reportGroup'} ==3 ){
        $reportGroup = "grade";
    }
    else{
        $reportGroup = "username";
    }

    $sort1 = $reportGroup if ( $sort1 eq '' );
    if ( !$sort2 )
    {
        if ( $sort1 eq "username" ) { $sort2 = "title"; }
        else { $sort2 = "username"; }
    }

    my $dateFrom =  $input->{'dateFrom'};
    my $dateTo =    $input->{'dateTo'};

    $dateToday =~ s/([\d]{4})([\d]{2})([\d]{2})[\d]+\.(0|1)/$1-$2-$3/;
    $todayStr = date_text($dateToday,1 );

    $dateFrom = $dateToday if ( !$dateFrom );
    $dateTo = $dateToday if ( !$dateTo );
    
    my $dateField = $input->{'dateField'};
    if(!$dateField || $dateField eq ''){
        $dateField = 'dateDue';
    }
    my $pNum = $input->{'pNum'};
    my ($odTotal,$odList); 
    my $rpFilter={};

   if(defined $input->{'idlist'} && $input->{'idlist'}  ne ''){
       my $idlist = $input->{'idlist'};
       $idlist =~ s/\$+/,/g;
       $idlist =~ s/,$//g;
       $rpFilter->{'sendEmail'}     = 1;
       $rpFilter->{'idlist'}        = $idlist;
       $rpFilter->{'groupBy'}       = $sort1;
       $rpFilter->{'sortWithinGroup'}= $sort2;
       ($odTotal,$odList) =  rpt_onloanList($dbh,$rpFilter);
   }
   elsif(defined $input->{'dateFrom'} && defined $input->{'dateTo'}){
       $rpFilter->{'dateField'}     = $dateField;
       $rpFilter->{'dateFrom'}      = $dateFrom;
       $rpFilter->{'dateTo'}        = $dateTo;
       $rpFilter->{'groupBy'}       = $sort1;
       $rpFilter->{'sortWithinGroup'}= $sort2;
       $rpFilter->{'overdue'}       = 1;

       ($odTotal,$odList) =  rpt_onloanList($dbh,$rpFilter);
   }
   
   my @retCont=();
   foreach my $rec(@$odList){
        my ($permission, $cookie, $template) = tmpl_read(
            {
                dbh             => $dbh,
                cgi             => $cgi,
                tmplFile        => 'circ/email_odUser.inc',
            }
        );
       $template->param(
            email       => $rec->{'email'},
            uid         => $rec->{'uid'},
            lastname    => $rec->{'lastname'},
            firstname   => $rec->{'firstname'},
            grade       => $rec->{'grade'},
            homeroom    => $rec->{'homeroom'},
            buildingcode=> $rec->{'buildingcode'},
            teacher     => $rec->{'teacher'},
            loanList    => $rec->{'loanList'},
            );
        loc_write($template,$itemOnLoanMsgMap);
        push @retCont,{uid=>$rec->{'uid'},email=>$rec->{'email'},emailcont=>$template->output};

   }

    $template->param(
      odList => $odList,
      odTotal=> $odTotal 
    );

    return \@retCont;
 }


#--------------------------------------------------------
sub  saveContent2Tbls{
    my($dbh,$contArr,$subject)=@_;

    my ($to,$uid) = ('',0);
    foreach my $od(@$contArr){
        $to  = $od->{'email'};
        if ($to){        
            $to =~ s/ +/,/g;
            $to =~ s/;+/,/g;
            $to =~ s/,+/,/g;
            $to =~ s/(^,|,$)//g;
        }

        $uid = $od->{'uid'};
        mail_enqueueMail($dbh,$uid,{email=>$to,subject=>$subject,content=>$od->{'emailcont'}});
    }


}
  
#--------------------------------------------------------



