#!/usr/bin/perl

# This script is not finished.

#use utf8;
use strict;
use CGI;

use Opals::Context;
#use Mail::Sendmail;
use Opals::Template qw(
    tmpl_read
    tmpl_write
);
use Date::Calc::Object qw(
    :all
);
use Opals::Context;
use Opals::Template qw(
    tmpl_read
    tmpl_write
    tmpl_preference

);
use Opals::Search qw(
    srch_searchRecord
);

use Opals::Marc21 qw(
    mc21_infoGeneral
);

use Opals::Mail qw(
    mail_send
);
use Opals::CurriculumStd qw(
        getLevelList_ny
        getCategoryList_ny
        getSbjStdList_ny
        getSubjectList_ny
        getStandardList_ny
        getBenchMarkList_ny
        get_nyById
        get_nyByIdList
        getDewey_1dec
        getDewey_2dec
);

use Time::localtime;
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        => 'util/bibsrc/stdsendbib.tmpl',
        }
);
my $tm = localtime;
my $todayStr = sprintf("%04d-%02d-%02d", $tm->year+1900, ($tm->mon)+1, $tm->mday);

my $to      = $cgi->param('email');
my $format  = $cgi->param('format'); 
 
my $pref    = tmpl_preference($dbh);
my $from    = $pref->{'emailAddress'};
my $smtp    = $pref->{'emailSmtp'};
my $pqf;
my $title   = $pref->{'libname'};

my @bibliography;

my $zid = $input->{'zid'};
($zid && $zid >= 0) || ($zid = 0);

#my $bibList = $cgi->cookie('nyStdRsList');
my $bibList =  $cgi->param('bibList');
 #format bibList is   stdId +":" + rid +",";
$bibList =~ s/(^\n|\n$)//g;
my $stdRS;
my $oddEven=0;

foreach my $stdId_rid (split (",", $bibList)){
    my @a = split(':',$stdId_rid);
    push @{$stdRS->{$a[0]}}, $a[1];
}

if(!$to){
    $template->param(
        format    =>$format,
        openForm =>1,
        email     =>$to
   );
}
else{

    my $bib = getBib($dbh,$title,$todayStr,$format);

    $to =~ s/ +/,/g;
    $to =~ s/;+/,/g;
    $to =~ s/,+/,/g;
    $to =~ s/(^,|,$)//g;
    #if (emailBib($smtp,$from,$to,'Bibliography',$bib)){
    if (mail_send($pref, $to, 'Bibliography', $bib)){
       $template->param(done=>1);
       #$template->param(bibStr=>$bib);
    }
    else{
       $template->param(error=>1);
    }
    $template->param(email=>$to );
}
tmpl_write($dbh, $cgi, $cookie, $template);


###############################################################################
sub getBib{
    my($dbh,$title,$todayStr,$format)=@_;
    my $bibStr="";  
    
#-----------------------------
my ($summary,$callnumber);  
foreach my $stdCode (sort keys %{$stdRS}) {
     #loop all standard codes
    my $stdResources ;

    $stdResources = get_nyById($dbh,$stdCode );
    my @stdBib; 
    
    my @bibArr;
    foreach my $rid (sort @{$stdRS->{$stdCode}}){         
    #loop all records are in the standard code      
        $summary ="";
        $pqf = "\@attr 1=12  $rid ";
        my ($resultSize, $marcxml) = srch_searchRecord($dbh, $zid, 'f', $pqf, $ENV{'Z_INDEX_BASE'}, 1);
        my %info = mc21_infoGeneral($marcxml->[0]);
        foreach my $sum (@{$info{'listSummary'}}) {
            $summary .=  "&nbsp;&nbsp;" .$sum->{'val'} ;
        }
        foreach my $itemList (@{$info{'itemList'}}) {
            $callnumber = $itemList->{'callnumber'};
        }
        my $bibInfo ;
        $bibInfo->{'rid'}           = $rid;
        $bibInfo->{'callnumber'}    = $callnumber;
        $bibInfo->{'callnumber'}    =~ s/[\.\,]+$//g;
        $bibInfo->{'title'}         = $info{'title'};
        $bibInfo->{'title'}         =~ s/[\.\,]+$//g;
        $bibInfo->{'title_sub'}     = $info{'title_sub'};
        $bibInfo->{'title_sub'}     =~ s/[\.\,]+$//g;
        $bibInfo->{'author'}        = $info{'author'};
        $bibInfo->{'author'}        =~ s/[\.\,]+$//g;
        $bibInfo->{'pubPlace'}      =   $info{'place'};
        $bibInfo->{'pubPlace'}      =~ s/[\.\,]+$//g;
        $bibInfo->{'pubName'}       =   $info{'publisher'};
        $bibInfo->{'pubName'}       =~ s/[\.\,]+$//g;
        $bibInfo->{'pubDate'}       =   $info{'copyright'};
        $bibInfo->{'pubDate'}       =~ s/[\.\,]+$//g;
        $bibInfo->{'summary'}       = $summary;
        $bibInfo->{'summary'}       =~ s/[\.\,]+$//g;
        #$bibInfo->{'note'}          = encode('utf8',$stdCode);

        $oddEven=$oddEven == 1?0:1;
        $bibInfo->{'oddEven'}       = $oddEven;
 
        push @bibArr, $bibInfo;
    }
        $stdResources->{'stdBib'} = \@bibArr;    
        push @bibliography, $stdResources;
   
}

if ( $format eq 'shelf' )
    { @bibliography = sort {$a->{'callnumber'} cmp $b->{'callnumber'}} @bibliography; }
else { @bibliography = sort {$a->{'author'} cmp $b->{'author'}} @bibliography; }


#-------------------------------
     if($format eq 'mla'){
       $bibStr=createBib_MLA(\@bibliography);
    }
    elsif($format eq 'apa'){
       $bibStr=createBib_APA(\@bibliography);
    }
    else{
       $bibStr=createBib_shelf(\@bibliography);
    }
    $bibStr ="<span style='font-size:16pt;font-weight:bold;text-align:left'>$title</span>\n<br>$todayStr\n<br><br><hr><br>$bibStr";

    return $bibStr;
}

###############################################################################
=item
sub emailBib{
    my ($smtp,$from,$to,$subject,$message)=@_;
    my %mail = (
        smtp            => $smtp,
        from            => $from,
        to              => $to,
        subject         => $subject,
        message         => $message ,
        'content-type'  => 'text/html; charset="utf-8'
    );
       
    return(sendmail %mail);
}
=cut


###############################################################################
sub createBib_MLA{
    my ($items)=@_;
    my $retval="";
    my $bibStr="";
    
    foreach my $stdCode (@$items) {
        $bibStr = "";
        $bibStr =  "<tr  style='height:27px;color:brown;background:#ECE6E6'><td colspan=3>" ;
        $bibStr .=  "<b>" . $stdCode->{'level'} . ":&nbsp;<i>" ;
        $bibStr .=  $stdCode->{'category'} . " -- ";
        $bibStr .=  $stdCode->{'subject'} . "  -- ";
        $bibStr .=  $stdCode->{'subjectStandard'} . "</b></i>";
        $bibStr .= "<div  style='margin-left:2em;margin-top:0.5em;'>";
        $bibStr .=  $stdCode->{'NYBmrk'} . "</div>";
        $bibStr .= "</td></tr>";

        foreach my $rec (@{$stdCode->{'stdBib'}}){            
           $bibStr .="<tr height=36><td  width=25px></td><td style='vertical-align:middle'>";
            if($rec->{'author'}){
                $bibStr .= $rec->{'author'} .". ";
            }
            if($rec->{'title'}){
                $bibStr .= "<i><b>" .$rec->{'title'};
                if($rec->{'title_sub'}){
                    $bibStr .= ": " . $rec->{'title_sub'};
                } 
                $bibStr .= "</b></i>.";
            }
            if($rec->{'pubPlace'}){
                $bibStr .= $rec->{'pubPlace'} .". ";
            }     
            if($rec->{'pubName'}){
                $bibStr .= $rec->{'pubName'} . ". ";
            }     
            if($rec->{'pubDate'}){
                $bibStr .= $rec->{'pubDate'} .". ";
            }
                   
           $bibStr .="</td></tr>";
                    
         }
         $retval .= $bibStr;         
    }
     
    
    $retval ="<table id='bibliography_singlel'  border=0><tr height=1><td width=20 ></td><td></td></tr>$retval </table>";
    
    return $retval;      
}
###############################################################################
sub createBib_shelf{
    my ($items)=@_;
    my $retval="";
    my $bibStr="";

    
    foreach my $stdCode (@$items) {
        $bibStr = "";
        $bibStr =  "<tr  style='height:27px;color:brown;background:#ECE6E6'><td colspan=3>" ;
        $bibStr .=  "<b>" . $stdCode->{'level'} . ":&nbsp;<i>" ;
        $bibStr .=  $stdCode->{'category'} . " -- ";
        $bibStr .=  $stdCode->{'subject'} . "  -- ";
        $bibStr .=  $stdCode->{'subjectStandard'} . "</b></i>";
        $bibStr .= "<div  style='margin-left:2em;margin-top:0.5em;'>";
        $bibStr .=  $stdCode->{'NYBmrk'} . "</div>";
        $bibStr .= "</td></tr>";

         foreach my $rec (@{$stdCode->{'stdBib'}}){

            if($rec->{'callnumber'}){
               $bibStr   .="<tr height=36 nowrap><td  width=25px></td><td style='valign:middle' width=150 nowrap>" . $rec->{'callnumber'} . "</td><td valign=middle>";
            }
            else{
                $bibStr  .="<tr height=36 nowrap><td  width=25px></td><td width=150></td><td  style='vertical-align:middle'>";
            }

            #$bibStr .="<tr><td width=150></td><td  style='vertical-align:top'>";
            if($rec->{'author'}){
                $bibStr .= $rec->{'author'} .". ";
            }
            if($rec->{'title'}){
                $bibStr .= "<u><b>" .$rec->{'title'};
                if($rec->{'title_sub'}){
                    $bibStr .= ": " . $rec->{'title_sub'};
                } 
                $bibStr .= "</b></u>.";
            }
            if($rec->{'pubPlace'}){
                $bibStr .= $rec->{'pubPlace'} .". ";
            }     
            if($rec->{'pubName'}){
                $bibStr .= $rec->{'pubName'} . ". ";
            }     
            if($rec->{'pubDate'}){
                $bibStr .= $rec->{'pubDate'} .". ";
            }

            $bibStr .="</td></tr>";            
         }
         
         $retval .= $bibStr;
    }
    
    $retval ="<table id='bibliography_singlel'  border=0><tr height=1><td width=20 ></td><td></td></tr>$retval </table>";
    return $retval;   

}
###############################################################################
sub createBib_APA{
    my ($items)=@_;
    my $retval="";
    my $bibStr="";
    
    foreach my $stdCode (@$items) {
        $bibStr = "";
        $bibStr =  "<tr style='height:27px;color:brown;background:#ECE6E6'><td colspan=3>" ;
        $bibStr .=  "<b> $stdCode->{'level'} :&nbsp;<i>" ;
        $bibStr .=  $stdCode->{'category'} . " -- ";
        $bibStr .=  $stdCode->{'subject'} . "  -- ";
        $bibStr .=  $stdCode->{'subjectStandard'} . "</b></i>";
        $bibStr .= "<div  style='margin-left:2em;margin-top:0.5em;'>";
        $bibStr .=  $stdCode->{'NYBmrk'} . "</div>";
        $bibStr .= "</td></tr>";

        foreach my $rec (@{$stdCode->{'stdBib'}}){
            $bibStr .="<tr height=36><td width=25px></td><td style='vertical-align:middle'>";
            if($rec->{'author'}){
                $bibStr .= $rec->{'author'} .". ";
            }
            if($rec->{'pubDate'}){
                $bibStr .= " (" . $rec->{'pubDate'} ."). ";
            }       
            if($rec->{'title'}){
                $bibStr .= "<u><b>" .$rec->{'title'};
                if($rec->{'title_sub'}){
                    $bibStr .= ": " . $rec->{'title_sub'};
                } 
                $bibStr .= "</b></u>.";
            }
            if($rec->{'pubPlace'}){
                $bibStr .= $rec->{'pubPlace'} .". ";
            }     
            if($rec->{'pubName'}){
                $bibStr .= $rec->{'pubName'} . ". ";
            }     
     
            $bibStr .="</td></tr>";
         }
         $retval .= $bibStr;
    }
    
    $retval ="<table id='bibliography_singlel' border=0><tr height=1><td width=20 ></td><td></td></tr>$retval </table>";

     return $retval;      
 
}
