#!/usr/bin/perl

# This script is not finished.

#use utf8;
use strict;
use CGI;
use Encode;
use POSIX qw(
    ceil
    floor
);

use Opals::Context;
#use Mail::Sendmail;
use Opals::Template qw(
    tmpl_read
    tmpl_write
);

use Opals::Context;
use Opals::Template qw(
    tmpl_read
    tmpl_write
    tmpl_preference

);

use Opals::Mail qw(
    mail_send
);
use Opals::Session qw(
    SessionHdl_get
);

use Opals::MarcXmlParser; 
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/save_sendbib.tmpl',
        }
);
my $op          = $cgi->param('op');
my $to          = $cgi->param('email');
my $title       = $cgi->param('title'); 
my $date        = $cgi->param('date'); 
my $format      = $cgi->param('format'); 
my $sumOption   = $cgi->param('sumOption');
my $contOption  = $cgi->param('contOption');
#my $sumOption  = 12; 
 
my $sessionID = $cgi->cookie('globalSessionID');
my $pref    = tmpl_preference($dbh);
my $from    = $pref->{'emailAddress'};
my $smtp    = $pref->{'emailSmtp'};
my $pqf;
my $zid = $input->{'zid'};
($zid && $zid >= 0) || ($zid = 0);

my %noteTbl;
if($op eq 'save'){
   $title = $cgi->cookie('bTitle');

   if($title eq ""){ 
        $title = "Bibliography";
   }
  $date  = $cgi->cookie('bDate');
   my $bib = getBib($dbh,$title,$date,$format);
   
   print "Content-Type:application/x-download\n";
   print "Content-Disposition:attachment;filename=bibliography.html\n\n";     
   print "<html><head>";
   print "<style>";
   print "table#bibliography_singlel {
    width:800px;
    margin-left:auto;
    margin-right:auto;
}
table#bibliography_singlel td {
    vertical-align:text-top;
    
}";
   print "</style>";
   print "<meta http-equiv='Content-Type' content='text/html; charset=utf-8'/></head><body>$bib</body></html>"

}
else{
    if(!$to){
        $template->param(
            format     =>$format,
            sumOption  =>$sumOption,
            contOption =>$contOption,

            #ridList  =>$ridList,
            openForm =>1,
            email     =>$to
       );
    }
    else{
        
        my $bib = getBib($dbh,$title,$date,$format);
        $to =~ s/ +/,/g;
        $to =~ s/;+/,/g;
        $to =~ s/,+/,/g;
        $to =~ s/(^,|,$)//g;  

        if (mail_send($pref, $to, 'Bibliography', $bib)){
           $template->param(done=>1);
           #$template->param(bibStr=>$to);
         }
        else{
           $template->param(error=>1);
        }
        $template->param(email=>$to );
    }
    tmpl_write($dbh, $cgi, $cookie, $template);
}

###############################################################################
sub getSelectedBibList{
    my ($dbh,$sessionID)=@_;

    my @ridList=();
    my $sth=$dbh->prepare("select distinct rid,note as userNote from opl_sessionVar 
                         where var ='bibliography' && ssid= ? ");
    $sth->execute($sessionID);
    my $marcXmlParser=undef;
    my $indexConfFile  = Opals::Context->config('sIndexConfig');
    $marcXmlParser=Opals::MarcXmlParser->new($indexConfFile) if (!defined $marcXmlParser);
    while (my $bib=$sth->fetchrow_hashref){
        my $rid  = $bib->{'rid'};
        my $fname=recordPath($rid)."/$rid.xml";
        $bib=$marcXmlParser->getRecInfoGeneral_file($fname);
        $bib->{'userNote'}   = encode('utf8',$bib->{'userNote'});
        $bib->{'callnum1St'}=$bib->{'itemList'}[0]->{'callnumber'};
        push @ridList, $bib;
    }
    $sth->finish;
    return @ridList;

}
#-----------------------------------------------------------------------------
sub recordPath {
    my ($rid) = @_;
    
    my $zRoot   = Opals::Context->config('zRoot');
    my $zPort   = Opals::Context->config('zPort');
    my $zDatabase = Opals::Context->config('zDatabase');
    my $dir     = "$zRoot/$zPort/record/$zDatabase/" . ceil($rid/1000);

    return $dir;
}

###############################################################################
sub getBib{
    my($dbh,$title,$date,$format)=@_;
    my $bibStr="";

    my ($summary,$callnumber,$contentNote);  
    my ($title505,$resp505,$miscInfo505,$contFormat505);  
    my @bibArr;
    my @bibList=getSelectedBibList($dbh,$sessionID);

    foreach my $bib (@bibList) {
        $summary ="";
        $contentNote ="";
       # foreach my $sum ($bib->{'summary'}) {
       #      $summary .=  "&nbsp;&nbsp;" .$sum->{'item'} ;
       # }
        foreach my $contNote(@{$bib->{'contentNote'}}){
            $contentNote .="<menu>";
            $contentNote .=$contNote->{"miscInfo"};
            $contentNote .="<ul>" ;
            foreach my $t(@{$contNote->{"titleRespList"}}){
                if($t->{"cnTitle"} ne ""  &&  $t->{"cnResp"} ne ""){
                 $contentNote .= "<li>" .$t->{"cnTitle"} . " / " . $t->{"cnResp"} ."</li>";
                }
                elsif($t->{"cnTitle"} ne ""){
                    $contentNote .= "<li>" .$t->{"cnTitle"} ."</li>";
                }
                else{
                    $contentNote .="<li>". $t->{"cnResp"}. " </li>";
                }
            
            
            foreach my $u(@{$contNote->{"uriList"}}){
                $contentNote .= "<li><a href='" . $u->{"uri"} . "'>" .$u->{"uri"} . "</a></li>";
            }

                    $contentNote .="</ul>";

                }
            $contentNote .="</menu>";
         }
                my $bibInfo ;
        $bib->{'title'}         =~ s/[\.\,]+$//g;
        $bib->{'title_sub'}     =~ s/[\.\,]+$//g;
        $bib->{'author'}        =~ s/[\.\,]+$//g;
        $bib->{'placePublication'}      =~ s/[\.\,]+$//g;
        $bib->{'namePublisher'}       =~ s/[\.\,]+$//g;
        $bib->{'datePublication'}       =~ s/[\.\,]+$//g;
        $bib->{'summary'}       = $summary;
        $bib->{'summary'}       =~ s/[\.\,]+$//g;
        $bib->{'note'}          = $bib->{'note'};

        
        # Ha
        $bib->{'contentNote'}    = $contentNote;

        push @bibArr, $bib;
    }

    my $sortOrder0 = $input->{'sortOrder0'};
    my $sortOrder1 = $input->{'sortOrder1'};
    my $sortOrder2 = $input->{'sortOrder2'};
    my $sortOrder3 = $input->{'sortOrder3'};
    my @sortOrder=();

    if($sortOrder0 && $sortOrder0 ne ''){
         @sortOrder=($sortOrder3,$sortOrder2,$sortOrder1,$sortOrder0);
    }
    elsif($format eq 'shelf'){
        @sortOrder=('pubDateSort','titleSort','author','callnumber');        
    }
    else{
        @sortOrder=('callnumber','pubDateSort','titleSort','author');
    }
    foreach my $sf (@sortOrder){
       @bibArr  = sort {lc($a->{$sf}) cmp lc($b->{$sf})} @bibArr; 
    }

   
    if($format eq 'mla'){
       $bibStr=createBib_MLA(\@bibArr);
    }
    elsif($format eq 'apa'){
       $bibStr=createBib_APA(\@bibArr);
    }
    else{
       $bibStr=createBib_shelf(\@bibArr);
    }


    $bibStr ="<span style='font-size:16pt;font-weight:bold;text-align:left'>$title</span>\n<br>$date\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 $rec (@$items){
        $bibStr="<br>";
        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->{'placePublication'}){
            $bibStr .= $rec->{'placePublication'} .". ";
        }     
        if($rec->{'namePublisher'}){
            $bibStr .= $rec->{'namePublisher'} . ". ";
        }     
        if($rec->{'datePublication'}){
            $bibStr .= $rec->{'datePublication'} .". ";
        }
               
        if($sumOption && $rec->{'summary'}){
           $bibStr  .= "<div style='padding-left:15px;line-height:16px;'><b><i>Summary:</i></b>&nbsp;" .$rec->{'summary'} ."</div>";
        }
        if($contOption && $rec->{'contentNote'}){
           $bibStr  .= "<div style='padding-left:15px;line-height:16px;'><b><i>Content Notes:</i></b>&nbsp;" .$rec->{'contentNote'} ."</div>";
        }

        $bibStr ="<tr ><td ></td><td  style='vertical-align:top'>$bibStr</td></tr>";
                
        if($rec->{'userNote'}){  
            $bibStr  .="<tr><td></td><td colspan=2 style='text-align:left' ><div style='padding-left: 15px;'><i><b>Note:</b>&nbsp;" . $rec->{'userNote'} . "</i></div></td></tr>";
        }
        $retval .= $bibStr;
     }
    $retval ="<table id='bibliography_singlel' cols=2 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 $rec (@$items){
        $bibStr="";
        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->{'placePublication'}){
            $bibStr .= $rec->{'placePublication'} .". ";
        }     
        if($rec->{'namePublisher'}){
            $bibStr .= $rec->{'namePublisher'} . ". ";
        }     
        if($rec->{'datePublication'}){
            $bibStr .= $rec->{'datePublication'} .". ";
        }

        if($sumOption && $rec->{'summary'}){
           $bibStr  .= "<div style='padding-left:15px;line-height:16px;'><b><i>Summary:</i></b>&nbsp;" .$rec->{'summary'} ."</div>";
        }
        if($contOption && $rec->{'contentNote'}){
           $bibStr  .= "<div style='padding-left:15px;line-height:16px;'><b><i>Content Notes:</i></b>&nbsp;" .$rec->{'contentNote'} ."</div>";
        }
 

        if($rec->{'callnumber'}){
           $bibStr   ="<tr height=18><td colspan=2></td></tr><tr nowrap><td style='vertical-align:top' width=150 nowrap>" . $rec->{'callnumber'} . "</td><td valign=top>$bibStr</td></tr>";
        }
        else{
            $bibStr  ="<tr height=18><td colspan=2></td></tr><tr nowrap><td width=150></td><td  style='vertical-align:top'>$bibStr</td></tr>";
        }
        
                       
        if($rec->{'userNote'}){  
            $bibStr .="<tr><td width=150></td><td style='text-align:left' ><div style='padding-left: 15px;'><i><b>Note:</b>&nbsp;" . $rec->{'userNote'} . "</i></div></td></tr>";
        }
        $retval .= $bibStr;
        
     }
    $retval ="<table id='bibliography_singlel' cols=2 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 $rec (@$items){
        $bibStr="<br>";
        if($rec->{'author'}){
            $bibStr .= $rec->{'author'} .". ";
        }
        if($rec->{'datePublication'}){
            $bibStr .= " (" . $rec->{'datePublication'} ."). ";
        }       
        if($rec->{'title'}){
            $bibStr .= "<u><b>" .$rec->{'title'};
            if($rec->{'title_sub'}){
                $bibStr .= ": " . $rec->{'title_sub'};
            } 
            $bibStr .= "</b></u>.";
        }
        if($rec->{'placePublication'}){
            $bibStr .= $rec->{'placePublication'} .". ";
        }     
        if($rec->{'namePublisher'}){
            $bibStr .= $rec->{'namePublisher'} . ". ";
        }     
 
                
        if($sumOption && $rec->{'summary'}){
           $bibStr  .= "<div style='padding-left:15px;line-height:16px;'><b><i>Summary:</i></b>&nbsp;" .$rec->{'summary'} ."</div>";
        }
        if($contOption && $rec->{'contentNote'}){
           $bibStr  .= "<div style='padding-left:15px;line-height:16px;'><b><i>Content Notes:</i></b>&nbsp;" .$rec->{'contentNote'} ."</div>";
        }
        $bibStr ="<tr ><td ></td><td style='vertical-align:top'>$bibStr</td></tr>";
                
        if($rec->{'userNote'}){  
            $bibStr  .="<tr><td></td><td colspan=2 style='vertical-align:top;text-align:left' ><div style='padding-left: 15px;'><i><b>Note:</b>&nbsp;" . $rec->{'userNote'} . "</i></div></td></tr>";
        }
        $retval .= $bibStr;
     }
    $retval ="<table id='bibliography_singlel' cols=2 border=0><tr height=1><td width=20 ></td><td></td></tr>$retval </table>";

     return $retval;      
 
}
