<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\DB;
use App\Mail\ReporteDinamico;
use App\Mail\AsercolMailing;
use Maatwebsite\Excel\Facades\Excel;
use App\Exports\ReporteDinamicoExport;
use App\GrupoEmpresarial;

class ReporteDinamicoCommand extends Command
{
    protected $signature = 'send:report';
    
    protected $description = 'Enviar reporte dinamicamente';


    protected $grupo_empresarial,$nombre_reporte;

    public function __construct()
    {
        parent::__construct();
    }

    public function handle()
    {
        //Sera el encargado de tomar la información de los grupos empresariales
        //generar el informe y enviarlo por correo

        $this->grupo_empresarial=DB::table('reporte_dinamico as a')
                    ->leftjoin('reporte_dinamico_grupo as b','b.id_reporte','=','a.id')
                    ->select(
                        'a.consulta as consulta_original',
                        'a.campos as campos_originales',
                        'a.base_origen',
                        'b.campos as campos_clientes',
                        'b.nombre',
                        'b.contactos'
                    )
                    ->where('b.inactivo','0')
                    ->where(DB::raw("LOCATE(".date("H").",b.horas_envio)"),'=','1')->get();


        if($this->grupo_empresarial){

            foreach($this->grupo_empresarial as $gru_empresarial){

                $conexion=  $gru_empresarial->base_origen;
                $campos=    $gru_empresarial->campos_clientes;
                $emails=    explode(',',$gru_empresarial->contactos);
                $consulta=  $gru_empresarial->consulta_original;
                $this->nombre_reporte=$gru_empresarial->nombre;
        
                $grupoEmpre=1;
                $filtroCampo="";
                $SQL=$consulta;
                $SQL=str_replace('?idgrupo',$grupoEmpre, $SQL);
                $SQL=str_replace('?campo',$campos."-", $SQL);
                $SQL=str_replace('-s','', $SQL);
        
                if($conexion)
                $datos_consulta = DB::connection($conexion)->select(DB::raw($SQL));
                else
                $datos_consulta = DB::select(DB::raw($SQL));    
        
                $filename=          'Reporte_dinamico_'.date("Y-m-d_h-i-s").'.xlsx';
                $Reporte =          new  ReporteDinamicoExport;
                $Reporte->data=     $datos_consulta;
                $Reporte->campos=   $campos;
                Excel::store($Reporte,$filename,'local');
                $url = storage_path("app/".$filename);
        
                $adjuntos=[];
        
                array_push($adjuntos,$url);
        
                $objeto['titulo'] =  "Declaración de importacion";
                $objeto['cuerpo'] =  $this->cuerpoEmail();
                $objeto['firma'] =   "";
                $objeto['adjuntos'] =$adjuntos;
                $asunto="Declaración de importacion";
        
                Mail::to($emails)->send(new AsercolMailing('100',$asunto,$objeto));
        
                unlink($url); // Eliminamos el archivo todavez enviado
            }
        }    
    }

    public function cuerpoEmail()
    {
        $servicio_cliente=DB::table('servicio_al_cliente')->get();
        $cuerpo="Señores,";
        $cuerpo.="<br><br>";
        $cuerpo.="Estimado Cliente,";
        $cuerpo.="<br>";
        $cuerpo.="Adjunto se encuentra el reporte <b>".$this->nombre_reporte."</b> generado automaticamente el día ".date("Y-m-d_h-i-s")."." ;
        $cuerpo.="<br><br>";
        $cuerpo.="Si requiere información adicional, puede comunicarse con nuestros directores de Servicio al Cliente:";
        $cuerpo.="<br>";
        $cuerpo.="<table>";

        foreach($servicio_cliente as $funcionario){
                $cuerpo.="<tr>";
                $cuerpo.="<td>".$funcionario->ciudad."</td>";
                $cuerpo.="<td>".$funcionario->funcionario."</td>";
                $cuerpo.="<td>".$funcionario->telefono1."</td>";
                $cuerpo.="<td>".$funcionario->correo."</td>";
                $cuerpo.="</tr>";
        }

        $cuerpo.="</table>";

        return $cuerpo;
    }
}
