#!/usr/bin/perl

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

use Opals::Context;
use Date::Calc qw(Day_of_Week Week_Number Day_of_Year);

use Opals::User qw(
    user_getInformation
);
use Opals::MarcXml qw(
    mxml_delete
);
use Opals::Date qw(
    date_parse
    date_today
    date_text
    date_f005
);
use Opals::Template qw(
    tmpl_read
    tmpl_write
    tmpl_rangedPageList
);
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 $tmplFile=($input->{'prnt'} eq '1')?"searchStats_prnt.tmpl":"searchStats.tmpl";
my $dFirst = Opals::Context->preference('dateFirst');
my $dLast  = Opals::Context->preference('dateLast');




my ($permission, $cookie, $template) = tmpl_read(
        {
            dbh             => $dbh,
            cgi             => $cgi,
            tmplFile        => "report/$tmplFile",
            reqPermission   => 'rpt_catRec',
        }
);


    my $rangeFYear=0;
    my $rangeAll =0;
    my $rangeSel=0;
    my $dateFrom= $input->{'statsFrom'};
    my $dateTo  = $input->{'statsTo'};

    my $dateRange= $input->{'dateRangeOpt'};

    my $dateToday = date_f005();
    $dateToday =~ s/([\d]{4})([\d]{2})([\d]{2})[\d]+\.(0|1)/$1-$2-$3/;
    if ($dateRange eq "all"){
        $dateFrom= "1970-01-01";
        $dateTo  = $dateToday;
        $rangeAll =1;
    }
    elsif($dateRange eq 'fYear' ||($dateFrom eq '' && $dateTo eq '' ) ){
        $dateFrom=$dFirst;
        $dateTo  =$dLast;
        $rangeFYear=1;
    }
    else{
        $rangeSel=1;
    }

    $template->param(statsFrom => $dateFrom);
    $template->param(statsTo   => $dateTo);
    $template->param(statsList => 1);
    my $statsRs = getSearchStats($dbh, $dateFrom, $dateTo);

    $template->param(
        "$dateRange"=>1,
        statsRs => $statsRs,
        from    => $dateFrom,
        to      => $dateTo,
        rangeFYear   => $rangeFYear,
        rangeAll   => $rangeAll,
        dateRangeOpt=>$dateRange,
        rangeSel    =>$rangeSel,
        hlpUrl     => Opals::Constant->getHlpUrl('itemdel'),
   );

   
#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, $cookie, $template);
#$dbh->disconnect();

################################################################################
sub getSearchStats{
    my ($dbh, $dateFrom, $dateTo) = @_;
    $dateFrom =~ s/(\d\d\d\d-\d\d-\d\d)(.*)/$1/g;
    $dateTo   =~ s/(\d\d\d\d-\d\d-\d\d)(.*)/$1 23:59:59/g;
    my $sqlFmt="select    searchType,count(searchType) 
             from      opl_srchLog 
             where     searchType <>'' && date between '$dateFrom' and '$dateTo' && %s group by searchType";
    my $sth;
    my $rptTbl={};
    my $hRow=[];
    my $rptMap=[
               {hits=>"0",       cond=>"hits=0" },
               {hits=>"1 - 50",  cond=>"hits between 1 and 50" },
               {hits=>"51 - 100",cond=>"hits between 51 and 100" },
               {hits=>"> 100",   cond=>"hits >100 " },
               ];


    foreach my $h(@$rptMap){
        push @$hRow,{cellData=>$h->{'hits'}};
        my $sql=sprintf($sqlFmt,$h->{'cond'});
        $sth     = $dbh->prepare($sql);
        $sth->execute();
        while( my ($st,$c)=$sth->fetchrow_array){
            $rptTbl->{$st}->{$h->{'hits'}}=$c;
        }
    }

    my @ret=();
    push @ret,{data=>$hRow};
    foreach my $s(keys %$rptTbl){
        my $row=[{cellData=>$s}];
        foreach my $r(@$rptMap){
            my $data=$rptTbl->{$s}->{$r->{'hits'}}||0;
            push @$row,{cellData=>$data};
        }
        push @ret,{data=>$row};
    }
    return  \@ret;
}




