#!/usr/bin/perl
#
# Script criado para que ao solicitar a exportacao de gravacoes para um determinado periodo
# nos realizamos em background a separacao e criacao dos arquivos para disponibilizacao do usuario
# como este processo pode demorar foi optado por processar os pedidos em alguns momentos do dia.
#
# Autor: Mike Tesliuk <mike@wsu.com.br>
#

use Date::Simple qw/date/;
use Date::Range;
use DBI;
use Data::Dumper;
use MIME::Lite;


# Declaracao de variaveis padrao
$database = "pabxvirtual";
$dbhost = "localhost";
$dbport   = "3306";
$dbuser   = "asteriskuser";
$dbpass   = "2sf__d09AJDKaef";


$url = "168.121.6.166";
$email_from = "sac@brdsoft.com.br";
$company = "BRDSOFT";

$wwwDir = "/var/www/html/pabxvirtual/storage/app/public/dl_files/customer";

$gerado = 0;

# preparando o banco de dados

$dsn = "DBI:mysql:database=$database;host=$dbhost;port=$dbport";
$dbh = DBI->connect($dsn, $dbuser, $dbpass);


$query = "SELECT
               a.id as id_pedido,
               a.accountcode,
               DATE(a.periodo_inicial) as data_inicio,
               DATE(a.periodo_final) as data_final,
               a.filename,
               a.instancia,
               b.name as nomerazao,
               b.email,
               b.login
            FROM pabxvirtual_dl_gravacoes a
              JOIN users b ON b.id=a.accountcode
            WHERE status = '0'";


# Executando query
my $sth = $dbh->prepare($query);
$sth->execute();


if($sth->rows > 0){

  # iniciando loop nos resultados
   while(my $qResult = $sth->fetchrow_hashref()){

     # Validando o range de datas que temos que buscar os arquivos
      my @data_range = get_dates($qResult->{'data_inicio'}, $qResult->{'data_final'});
      #my $getDir = "/home/" . $qResult->{'instancia'} . "/var/spool/asterisk/monitor/";
      my $getDir = "/var/spool/asterisk/monitor/";
      print "Diretorio principal de gravacoes: $getDir\n";

      $tmpfile = "/home/tmp/" . $qResult->{'filename'};

      foreach my $date (@data_range){
        my ($ano, $mes, $dia) = split(/-/, $date);

        chdir($getDir) or die("Falha ao entrar no diretorio de gravacoes");
        $dirData = $qResult->{'accountcode'} . "/" . $ano . "/" . $mes . "/" . $dia;
        print "Diretorio solicitado: $dirData\n";



        if(-e $dirData){

	  print "Compactando $dirData em $tmpfile\n";
          my @mycmd = ("/usr/bin/zip", "-r", $tmpfile, $dirData);
          system(@mycmd) == 0 or die "System @mycmd failed : $? ";
	  $gerado = 1;
        }



      }


      if($qResult->{'email'}){
	$email_dst = $qResult->{'email'};
      }else{
	$email_dst = $qresult->{'login'};
      }

      if($gerado eq 1){
	      print "TMPFILE: $tmpfile\n";
	      system("/bin/mv $tmpfile $wwwDir") == 0 or die "System @mycmd failed : $? ";

	      $queryUpdate = "UPDATE pabxvirtual_dl_gravacoes SET
				status = '1', email_enviado = '1'
			      WHERE id = '$qResult->{id_pedido}'";
			      print "Query Update: $queryUpdate\n";



	     $msgData = "
<p>Ol&aacute;!</p>
<br />
<p>Voc&ecirc; solicitou em seu PABX Virtual o download dos arquivos referente a grava&ccedil;&otilde;es de chamadas no per&iacute;odo de $qResult->{data_inicio} &agrave; $qResult->{data_final}.</p>
<p>Para fazer o download desses arquivos , clique no link abaixo:</p>
<p><a href='https://$url/storage/dl_files/customer/$qResult->{filename}'>https://$url/storage/dl_files/customer/$qResult->{filename}</a></p>
<p>Qualquer d&uacute;vida ou necessidade , basta responder a este e-mail.</p>
<br />
<p>
Atenciosamente ,<br />
$company 
</p>
";
#                To   => $qResult->{'email'},

	      my $msg = MIME::Lite->new(
		      From => "$company <$emailfrom>",
                      To   => $email_dst,
		      Subject => 'Aqui está suas gravações de Chamadas',
		      Type  => 'text/html',
		      Data => "$msgData"
	      );

	      if($msg->send){
		my $sth2 = $dbh->prepare($queryUpdate);
		$sth2->execute();
	      }
	      #print Dumper(@data_range);

	}else{
		$queryUpdate = "UPDATE pabxvirtual_dl_gravacoes SET
                                status = '1', email_enviado = '1'
                              WHERE id = '$qResult->{id_pedido}'";
                              print "Query Update: $queryUpdate\n";

		$msgData = "
<p>Ol&aacute;!</p>
<br />
<p>Voc&ecirc; solicitou em seu PABX Virtual o download dos arquivos referente a grava&ccedil;&otilde;es de chamadas no per&iacute;odo de $qResult->{data_inicio} &agrave; $qResult->{data_final}.</p>
<p>Infelizmente n&atilde;o foram encontrados dados para o per&iacute;odo em quest&atilde;o</p>
<p>Qualquer d&uacute;vida ou necessidade , basta responder a este e-mail.</p>
<br />
<p>
Atenciosamente ,<br />
$company
</p>
";
#                To   => $qResult->{'email'},

              my $msg = MIME::Lite->new(
                      From => "$company <$emailfrom>",
                      To   => $email_dst,
                      Subject => 'Nenhuma gravacao encontrada para o periodo',
                      Type  => 'text/html',
                      Data => "$msgData"
              );

              if($msg->send){
                my $sth2 = $dbh->prepare($queryUpdate);
                $sth2->execute();
              }
	}


   }


}else{
  print "Sem solicitacoes de exportacao";
}


sub get_dates($$){
  my ($start_date, $end_date) = @_;
  print "$start_date - $end_date\n";
  my $range = Date::Range->new( date($start_date), date($end_date) );
  my @all_dates = $range->dates;

  return @all_dates;
}
