#!/usr/bin/perl 
use lib("/www/opals/module");
use Opals::Context('/etc/opals/conf/opals');

use strict;
use DBI;
use Getopt::Std;
use POSIX qw(
    ceil
    floor
);
use Time::localtime;
use XML::SAX;
use base qw( XML::SAX::Base );
use Opals::MarcXmlParser; 
use Opals::SolrIndex qw(
    slr_search
    slr_buildSearchQuery
    slr_buildSearchQuery_ARL
    slr_getSuggestion
    slr_updateIndexDir
    slr_updateIndexFile
    slr_delIndex
    slr_browseSubject_beginWith
    slr_browseSubject_keyword
    slr_browseAuthor_keyword

    slr_getARLMinMax_fieldVal
    slr_sbjAuthority_search

    
);
use Opals::RSSReader; 
use Opals::Circulation qw(
    circ_getRecCircStatus
    );
my $dbh = Opals::Context->dbh();
END { $dbh->disconnect(); }

use Opals::Portal qw(
    portal_getWeather
); 



my $searchArg ={keyword=>'canada', tag=>'69x',ind2=>12};
   my $sTerm=$searchArg->{'keyword'};
    $sTerm =~ s/^\s*|\s*$//g;
    $sTerm =~ s/([\+\-\(\)\{\}\[\]\^\"\~\?\:\!\\])/\\$1/g;
    $sTerm =~ s/%/%25/g;
    $sTerm =~ s/&/%26/g;

    my $sTag  = $searchArg->{'tag'};
       $sTag  =~ s/x+$//gi;
       $sTag  = "" if($sTag !~ m/6[0-9]{0,2}/);  
       $sTag .= "*" if(length($sTag)>0 && length($sTag)<3);

    my $sInd1 = $searchArg->{'ind1'};
       $sInd1 = "" if($sInd1 !~ m/^[0-9]$/);
    my $sInd2 = $searchArg->{'ind2'};
       $sInd2 = "" if($sInd2 !~ m/^[0-9]$/);

    my $query  = $sTerm eq ""?"subject:*":"subject:$sTerm";
       $query .= " AND tag:$sTag" if($sTag ne "");
       $query .= " AND ind1:$sInd1" if($sInd1 ne "");
       $query .= " AND ind2:$sInd2" if($sInd2 ne "");

print "$query\n";

print 'STARTTIME: ', `date -R`, "\n";
my ($hits,$sbjList)=(0,[]);#slr_sbjAuthority_search("canada",0,10);
 print "found:$hits\n";
foreach my $sbjRec(@$sbjList){
    printf("id:%s\ntag:%s\tind1:%s\tind2:%s\t%s\n\t\t\t%s\n",$sbjRec->{'id'},$sbjRec->{'tag'}, $sbjRec->{'ind1'}, $sbjRec->{'ind2'}, $sbjRec->{'subject'}, $sbjRec->{'subfields'});
}
#testSuggestion();
#testSearchARL();
#testSearch4();

#my ($min,$max) =slr_getARLMinMax_fieldVal("accelerated reader","readingLevel");
# print "$min  >> $max \n";

#($min,$max) =slr_getARLMinMax_fieldVal("accelerated reader","pointValue");
# print "$min  >> $max \n";
#    my $marcXmlParser=Opals::MarcXmlParser->new("/etc/opals/solr/conf/indexConf.xml") ;
#    print $marcXmlParser->getSolrRecXml_file("/data/idzebra/210/record/ztest/8/7920.xml");
#    print $marcXmlParser->getSolrRecXml_file("/data/idzebra/210/record/opals/10/9432.xml");
#     print $marcXmlParser->getSolrRecXml_file("/data/idzebra/210/record/opals/24/23011.xml");
    
#slr_updateIndexDir("/data/idzebra/210/record/opals/");
#slr_delIndex(21488)    ;
#my $marcXmlParser=Opals::MarcXmlParser->new("/etc/opals/solr/conf/indexConf.xml") ;
#print $marcXmlParser->getSolrRecXml_file("/data/idzebra/210/record/opals/19/18329.xml");
#slr_updateIndexFile("/data/idzebra/210/record/ztest/1/633.xml");
 

#testSbjectBrowse();
#test_weather();


print 'END TIME: ', `date -R`, "\n";

#print mil2AmPmTime('22:00') ,"\n";

sub hilight{
    my($str,$hlStr)=@_;
    my $tmp =$hlStr ;
    $tmp =~ s/<em>|<\/em>//g;
    if($str eq $tmp){
        return $hlStr;
    }
    return $str;
}
sub mil2AmPmTime{
    my ($time)=@_;
    return $time if($time !~ m/[\d]{1,2}:[\d]{1,2}/g);
    my $amPm ="AM";
    my @hr=split(':',$time);
    if(@hr[0]>12){
        $amPm="PM";
        @hr[0] -=12;
    }
    return sprintf("%d:%d %s",@hr[0],@hr[1],$amPm);

}
sub test_weather{
   my $wHtml =portal_getWeather($dbh,"montreal","c");
   print "$wHtml\n"; 
     
}
sub testRSS{
    my $rss=Opals::RSS->new();
    my $rss =$rss->read({rssUrl=>"http://www.npr.org/rss/rss.php?id=1052"});
    #my $rss =$rss->read("http://ztest.dione.scoolaid.net/bin/ajax/circ/libHours");
    print "channel: ", $rss->{'channel'}->{'title'}, $rss->{'channel'}->{'link'},"\n\n";
=item    
    foreach my $item(@{$rss->{'itemList'}}){
        print "item: ",$item->{'title'},"\n";
        print "description: ",$item->{'description'},"\n";
    }
=cut    
}
sub _fixPubDate{
    my ($pubdate)=@_;
    if($pubdate =~ /([\d]{4})/){
        $pubdate=$1;
    }
    return $pubdate;
}

sub testSbjectBrowse{
    #my ($hits,$sbjList)=slr_browseSubject_beginWith("arts");
    my ($hits,$sbjList)=slr_browseAuthor_keyword("ruth");
    print "$hits\n";
    foreach my $s(@$sbjList){
        print "\t$s\n";
    }
}   
sub testSearchARL{
    my  $input={sf0=>4,kw0=>"Digory",program=>'accelerated reader',pointvalueFrom=>2.1};
    my $lQuery=slr_buildSearchQuery_ARL($input);;
    print "$lQuery\n";
    my $rs= slr_search({lQuery=>$lQuery,recFormat=>'marcXml',offset=>0,size=>5});

 
    print "hits $rs->{'hits'} n";
    foreach my $rec (@{$rs->{'recordList'}}){
        print "$rec\n";
     }

    
}
 
#########################################
sub testSearch1{
    my($str)=@_;
    print "$str\n";
    my $input={sf0=>'1016',kw0=>'cat',boolop0=>'OR',,boolop1=>'OR'};
    my $filter={recType=>['Book']};
    my $lQuery=slr_buildSearchQuery($input,$filter);
    print "query:$lQuery\n";

    my $rs= slr_search({lQuery=>$lQuery,recFormat=>'brief',offset=>0,size=>5});
    
    print "hits " . $rs->{'hits'}, "\n";
    
    foreach my $rec (@{$rs->{'recordList'}}){
    print "===================================\n";
    foreach my $fname (keys %$rec){
        if (ref($rec->{$fname}) eq "ARRAY"){
            print "$fname:\n";
            foreach my $v(@{$rec->{$fname}}){
                print "\t* $v->{'item'}\n";
            }
        }
        else{
            printf ("% 18s:%s\n", $fname,$rec->{$fname});
        }
    }

   }
   foreach my $f(@{$rs->{'facet'}}){
       print $f->{'field'},"\n";
       foreach my $fl(@{$f->{'facetList'}}){
           print "\t", $fl->{'facet'}, "(", $fl->{'found'} ,")\n";
       }
   }
}

#########################################
sub testSearch2{

    my $input={sf0=>'1016',kw0=>'montreal',boolop0=>'OR',sf1=>'1003',kw1=>'new brunswick',boolop1=>'OR'};
    my $lQuery=slr_buildSearchQuery($input);
    my $rs= slr_search({lQuery=>$lQuery,recFormat=>'detail',offset=>10,size=>1});
    my ($hits,$recList)= ( $rs->{'hits'},$rs->{'recordList'});

 
    print "hits $hits\n";
    foreach my $rec (@$recList){
    print "===================================\n";
    foreach my $fname (keys %$rec){
        if (ref($rec->{$fname}) eq "ARRAY"){
            print "$fname:\n";
            foreach my $v(@{$rec->{$fname}}){
                foreach my $f(keys %$v){
                    print "\t* $f  :",  $v->{$f} ," \n";
                }
            }
        }
        else{
            print "$fname:", $rec->{$fname}, "\n";
        }
    }

   }
}
#########################################
sub testSearch3{

    my $input={sf0=>'1016',kw0=>'montreal',boolop0=>' OR ',sf1=>'1003',kw1=>'new brunswick',boolop1=>' OR '};
    my $lQuery=slr_buildSearchQuery($input);
    my ($hits,$recList)= slr_search($lQuery,'marcXml',0,3);

 
    print "hits $hits\n";
    foreach my $rec (@$recList){
        print "$rec\n";
     }

   
}
#########################################
sub testSearch4{

    my $input={sf0=>'12',kw0=>'11234'};
    my $lQuery=slr_buildSearchQuery($input);
    my $rs= slr_search({lQuery=>$lQuery,recFormat=>'detail',offset=>0,size=>1});
    my ($hits,$recList)= ( $rs->{'hits'},$rs->{'recordList'});

 print "$lQuery\n";
    print "hits $hits\n";
    foreach my $rec (@$recList){
    print "===================================\n";
    foreach my $fname (keys %$rec){
        if (ref($rec->{$fname}) eq "ARRAY"){
            print "$fname:\n";
            foreach my $v(@{$rec->{$fname}}){
                foreach my $f(keys %$v){
                    print "\t* $f  :",  $v->{$f} ," \n";
                }
            }
        }
        else{
            print "$fname:", $rec->{$fname}, "\n";
        }
    }
    foreach my $cn(@{$rec->{'contentNote'}}){
        print "Content Note\n";
        foreach my $tr(@{$cn->{'titleRespList'}}){
            print $tr->{'cnTitle'} ,"/" , $tr->{'cnResp'} ,"\n";
        }
    }

   }
}
####################
#########################################
#test Suggestion   
sub testSuggestion{
       
my $suggestion= slr_getSuggestion('1016','carrd');
print "suggestion:$suggestion\n";
my $suggestion= slr_getSuggestion('title','neew bruinswik');
print "suggestion title:$suggestion\n";
my $suggestion= slr_getSuggestion('author','neew bruinswik');
print "suggestion author:$suggestion\n";
}
# /test suggestion

#########################################
1;
exit 0;

