#!/usr/bin/perl

my $scriptname;

BEGIN {
    $scriptname = `basename $0`;
    chomp $scriptname;

    sub print_help {
    print <<_STR_;
NAME:
    $scriptname: generic cron script for OPALS sites.
SYNOPSIS:
    PERL5LIB=/www/\$VERSION/module OPALS_CONF=/etc/opals/conf/\$SITECODE $0
_STR_
    }

    if (!$ENV{'PERL5LIB'} || !$ENV{'OPALS_CONF'}) {
        print_help();
        exit 1;
    }
}

use strict;

use Opals::Context;
use Opals::Mail qw(
    mail_sendQueuedMail
);
use Opals::Marc21 qw(
    mc21_import
    mc21_export
);
use Opals::MarcXml qw(
    mxml_processReplaceItemType
    mxml_processGE852
);
use Opals::Session qw(
    SessionHdl_clean
);
use Opals::Tb_Import qw(
    tb_m21_import
    tb_csv_import
);

use Opals::Eq_Import qw(
    eq_csv_import
);
use Opals::Template qw(
    tmpl_preference
);
use Opals::WebServiceClient qw(
    wsc_sendNextUpdateRequest2Union
    wsc_sendCircData
);
use Opals::Indexer qw(
    ind_updateEbook
);
use Opals::Report qw(
    rpt_preDueEmailNotice
);
use Opals::Circulation qw(
    circ_anonymizeLoan
);

use Opals::Eq_SolrIndex;
use Opals::Eq_GlobalEditor;
use Opals::Tb_Mail;
use Opals::BackgroundJobs qw(
    bgjob_execute
);
my $dbh = Opals::Context->dbh();
END { $dbh->disconnect(); }


################################################################################
my $backupRunning = `ps -ef | grep 'opals/bin/backup' | grep -v grep`;
if ($backupRunning) {
    print "Backup is running...\n";
    exit 1;
}
my $scriptname = `basename $0`;
chomp $scriptname;
my $isRunning = `ps -ef | grep $scriptname | grep $ENV{'OPALS_CONF'} | grep -v grep | wc -l`;
chomp $isRunning;
if ($isRunning > 1) {
    print "is running...\n";
    exit 2;
}

if($ENV{'PERIODICITY'} eq 'daily'){
    job_daily();
}
else{
    job_minutely();
}

############################################################
sub job_minutely{
    my ($DB) = $dbh->selectrow_array('select database()');
    print "Processing requests on $DB...\n";
    mc21_import($dbh);
    mc21_export($dbh);
    mxml_processReplaceItemType($dbh);
    mxml_processGE852($dbh);
    SessionHdl_clean($dbh,24*60);
    wsc_sendNextUpdateRequest2Union($dbh);
    wsc_sendCircData($dbh);

    my $pref = tmpl_preference($dbh);
    my $nDay=$pref->{'preDueNotice'};
    if(defined $nDay && $nDay>0){
        rpt_preDueEmailNotice($dbh,$nDay);
    }
    mail_sendQueuedMail($dbh,$pref);
    bgjob_execute($dbh);
#circ_anonymizeLoan($dbh);

    tb_m21_import($dbh);
    tb_csv_import($dbh);

    my $eq_solr = Opals::Eq_SolrIndex->new(dbh=>$dbh);
    $eq_solr->eq_slr_updateIndex();
    my $eq_ge = Opals::Eq_GlobalEditor->new(dbh=>$dbh);
    $eq_ge->eq_ge_process();
    my $tb_mail = Opals::Tb_Mail->new(dbh=>$dbh);
    $tb_mail->mail_sendQueuedMail();

    eq_csv_import($dbh);
    #ind_updateEbook($dbh);
}
############################################################
sub job_daily{
    my ($DB) = $dbh->selectrow_array('select database()');
    print "Processing requests on $DB...\n";
    circ_anonymizeLoan($dbh);
}


exit 0;
