#!/usr/bin/perl
use DBI;
use warnings;
use strict;
use Switch;
use Mail::Mailer;

# Perl Environment
# BEGIN {
#     $ENV{LD_LIBRARY_PATH}='/usr/lib/oracle/11.1.0.1/client64/lib/:$LD_LIBRARY_PATH';
#     $ENV{ORACLE_HOME} = '/home/oracle/11.1.0.1';
#     $ENV{TWO_TASK}    = 'DESLIN9I';
#     $ENV{TNS_ADMIN} = '/etc/oracle';
#     $ENV{PATH} = '$PATH:/usr/lib/oracle/11.1.0.1/client64/bin';
#     $ENV{SQLPATH} = '/usr/lib/oracle/11.1.0.1/client64/bin';
#     $ENV{OLDPWD} = '/usr/lib/oracle/11.1.0.1';
# }

# home del programa
my $homedir = "/var/www/html/sirevih/util/mensajeria/";

# archivo de log de la corrida
my $logfile = "$homedir/mensajeria.log";

# abrir el log
`echo "------------COMIENZO DE CORRIDA-------------" >> $logfile`;
my $hora = localtime;
`echo $hora >> $logfile`;

# Constantes

use constant true => 1;
use constant false => 0;

# Para Pg
use constant BDNA => 'sirevih_trunk';


# Para Oracke
use constant OSID => 'deslin9i';
use constant OPOR => 1521;

# Común
#use constant USER => 'sivih'; # desarrollo eva
#use constant PASS => 'mysivih'; # desarrollo eva
#use constant HOST => 'localhost'; # desarrollo eva
use constant USER => 'elegibilidad'; # prod banavih
use constant PASS => 'elegibilidad'; # prod banavih
use constant HOST => '192.168.1.102'; # prod banavih



# Driver (escojer uno)
#use constant DRIV => 'Pg:dbname='.BDNA;
use constant DRIV => 'Oracle:sid='.OSID.';port='.OPOR;

# Finalmente el DSN
use constant DSN  => 'dbi:'.DRIV.'; host='.HOST;

# Globales
my $sthSelectSysMensaje;
my $sthUpdateSysMensaje;
my $dbSirevih = DBI->connect(DSN, USER, PASS, {AutoCommit => 1, RaiseError=>1, PrintError=>1})or die "$DBI::errstr\n";

# Main
&prepare_queries;
&execute_queries;

# Cleanup
$sthSelectSysMensaje->finish();
$sthUpdateSysMensaje->finish();
$dbSirevih->disconnect();

exit();

sub prepare_queries {

    my $querySelectSysMensaje = qq|
	SELECT * FROM sys_mensaje 
        WHERE sys_status_mensaje_id = 1
	|;
    $sthSelectSysMensaje = $dbSirevih->prepare($querySelectSysMensaje);

    my $queryUpdateSysMensaje = qq|
	UPDATE sys_mensaje SET 
	sys_status_mensaje_id = 2
	WHERE id = ?
    |;
    $sthUpdateSysMensaje = $dbSirevih->prepare($queryUpdateSysMensaje);

}

sub execute_queries {

    $sthSelectSysMensaje->execute();

    my $i = 0;
    while (my $ref = $sthSelectSysMensaje->fetchrow_hashref('NAME_lc')) {

	if ( &execute_envio_mail($ref->{'destino'}, $ref->{'mensaje'}) ) {
            $sthUpdateSysMensaje->execute($ref->{'id'});
            $i++;
	}

    }
    `echo "MAILS ENVIADOS: $i" >> $logfile`;
    my $hora = localtime;
    `echo $hora >> $logfile`;
    `echo "--------- FIN DE CORRIDA -----------" >> $logfile`;

}


sub execute_envio_mail() {


    my $para = shift;
    my $mens = shift;

    eval {
        my $m = Mail::Mailer->new("sendmail");
        $m->open( { From => 'banavih@banavih.gob.ve',
                    To   => $para,
                    Subject => 'Mensajería SIREVIH'
                } );

        print $m $mens;

        $m->close;
    };

    return true;

# Esto no esta funcionando... hay que revisar bien la doc de
# Mail::Mailer a ver


#     if ($@) {
#         return true;
#     } else {
#         return false;
#     }


}
