#!/usr/bin/perl

#use utf8;
use strict;
use CGI;


use Opals::Context;
use Opals::Constant;

use Date::Calc::Object qw(
    :all
);
use POSIX qw(
    floor
);
use Time::localtime;

use Opals::Template qw(
    tmpl_read
    tmpl_write
    tmpl_preference
    tmpl_rangedPageList

);

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


use Opals::Rating qw(
    cmntRating_getComntList_byFilter
    cmntRating_countComntList_byFilter
    cmntRating_getAvgRating
);
use Opals::Locale qw(
    loc_getMsgFile
    loc_write
);

################################################################################

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        => 'rating/bookRatingMnt.tmpl',
            reqPermission   => 'rating',
        }
);
    my @cookieList = (@$cookie);
    my $syspref      = tmpl_preference($dbh);
    my $tm = localtime;
    my $todayStr = sprintf("%04d-%02d-%02d", $tm->year+1900, ($tm->mon)+1, $tm->mday);
    my $dFirst = Opals::Context->preference('dateFirst');
    my $dLast  = Opals::Context->preference('dateLast');

    my $dateFrom= $input->{'statFrom'};
    my $dateTo  = $input->{'statTo'};
   
    my $dateToday = date_f005();
    $dateToday =~ s/([\d]{4})([\d]{2})([\d]{2})[\d]+\.(0|1)/$1-$2-$3/;
    my $dateRange= $input->{'dateRangeOpt'};
    if ($dateRange eq "all"){
        $dateFrom= "1970-01-01";
        $dateTo  = $dateToday;
    }
    
    $dateFrom = $dateToday if ( !$dateFrom );
    $dateFrom .= " 00:00:00";
    $dateTo = $dateToday if ( !$dateTo );
    $dateTo .= " 23:59:59";

    my $pSize = 10;
    my $pNum = $input->{'pNum'};
    $pNum = 1 if ( !$pNum );
    my $dir     = $input->{'dir'};
    $dir       = 'asc' if ( !$dir );

    my $sort    = $input->{'sort'};
    if ( !$sort || $sort eq ''){
        $sort = 'avgRate' ;
    }
    my $repuid      = $template->param('curUserId');
    my $firstname   = $input->{'userFirstname'};
    my $lastname    = $input->{'userLastname'};
    my $t_firstname = $input->{'t_firstname'};
    my $t_lastname  = $input->{'t_lastname'};
  
    my $offset= ($pNum -1) * $pSize ;
    my $rFilter ={dateFrom   =>$dateFrom,    dateTo    =>$dateTo,
                  firstname  =>$firstname,   lastname  =>$lastname,
                  t_firstname=>$t_firstname, t_lastname=>$t_lastname,
                 };
    my $rList = cmntRating_getComntList_byFilter($dbh,$offset,$pSize,$sort,$dir,$rFilter);
    foreach my $r (@$rList) {
       # my $avgRating = cmntRating_getAvgRating($dbh,$r->{'rid'});
        my $avgRating = $r->{'avgRate'};
        my $numOfStars =floor($avgRating);
        my $fraction= $avgRating - $numOfStars ;
        if($fraction >0.25 && $fraction<0.75){
            $numOfStars += 0.5;
        }
        elsif($fraction >0.75){
            $numOfStars += 1;
        }

        $avgRating = sprintf("%.2f", $avgRating);
        $r->{'avgRating'}  = $avgRating;
        $r->{'numOfStars'} = $numOfStars;
    }
    
  #  @$rList = sort{$b->{'avgRating'} <=> $a->{'avgRating'}} @$rList if($sort eq 'avgRating');
       
    MakePages($dbh, $input, $template, $pSize, $rFilter);

  $template->param( rList     => $rList);
  $template->param(statFrom   => $dateFrom,
                     statTo   => $dateTo,
                     sort     => $sort,
                     dir      => $dir,
                     pNum     => $pNum,
                     repuid   => $repuid,
                     firstname=> $firstname,
                     lastname => $lastname,
                     t_firstname=> $t_firstname,
                     t_lastname => $t_lastname
                     );

    if($dateRange eq 'all'){
        $template->param(
            rangeAll   => 1,
            dateRangeOpt=>"all"
       );
    }
    elsif($dateRange eq 'fYear'){
        $template->param(
            from    => substr($dateFrom, 0, 10),
            to      => substr($dateTo, 0, 10),
            rangeFYear   => 1,
            dateRangeOpt=>"fYear"
       );
    }
    else{
        $template->param(
            from    => substr($dateFrom, 0, 10),
            to      => substr($dateTo, 0, 10),
            rangeSel   => 1,
            dateRangeOpt=>"rangeSel"
       );
    }

#Tue, Jan 12, 2010 @ 10:31:41 EST
my $msgValMap ={};
my $msgMap            =loc_getMsgFile('report/reports.msg',$msgValMap);
loc_write($template,$msgMap);



tmpl_write($dbh, $cgi, \@cookieList, $template);
#---------------------------------------------------------
sub MakePages
{
    my ($dbh, $input, $template, $pagesize,$rFilter) = @_;
    my ($countRecord) = cmntRating_countComntList_byFilter($dbh,$rFilter);
    ($input->{'pNum'} && $input->{'pNum'} > 0) || ($input->{'pNum'} = 1);
    my @rangedPageList = tmpl_rangedPageList($countRecord, $input->{'pNum'}, $pagesize, 10);
    $template->param(
        countRecord     => $countRecord,
        rangedPageList  => \@rangedPageList,
    );
}

