<?php namespace App\Http\Controllers;  

use App\Custom\SQLConnection; 
use App\Custom\Misc; 
use App\Custom\Mailer;
use Request; 
use Session;
use Illuminate\Support\Facades\Input;
use DB;
use DateTime;
use stdClass;

class ImperiumEmailController extends Controller {

    public static function enviarMailImperium($blade = 'ALTA-USUARIO', $subject, $contraparte, $email_alt = '', $doc_id=NULL, $lista_faltantes='') {

        if ($contraparte > 0) {

            $data = SQLConnection::backendStoreProcedure('Imperium_cliente_contraparte_led', array('buscar_contratista_imperium', $contraparte), 'selectOne');
            
            if (!empty($data->email)) {
                
                // En el caso del mail del alta para proceder tenemos que validar que no tenga la constraseña encriptada previamente
                if ($blade == 'ALTA-USUARIO' AND $data->password == '@encripted') {
                    return false;
                }
                
                $app_id = 3;
                $app_key = 'EMAIL-IMPE';
                $cliente = $data->cliente;
                

                // Busco texto personalizado del mail para el cliente con el sufijo del ID cliente. Si no existe busco el genérico
                $personalized_blade = $blade . '_' . $cliente;

                $textos = SQLConnection::backendStoreProcedure('traducciones_web', array('select', $app_id, $personalized_blade, $app_key), 'selectOne');
                if (empty($textos)) {
                    $textos = SQLConnection::backendStoreProcedure('traducciones_web', array('select', $app_id, $blade, $app_key), 'selectOne');
                }

                // personalización web para el cliente si existe
                $web = SQLConnection::backendStoreProcedure('multi_web_', array('cliente', NULL, $app_id, $cliente), 'selectOne');

                $body = self::generateMailBody($contraparte);
                $content = self::generateMailContent($blade, $contraparte, $doc_id, $lista_faltantes);
                $mail_subject = self::generateMailContent($subject, $contraparte);

                
                // Reemplazo el contenido del mail
                $mail_content = str_replace(['%%EMAIL_CONTENT%%'], [$content], $body);

                // personalización web para el cliente si existe
                $web = SQLConnection::backendStoreProcedure('multi_web_', array('cliente', NULL, $app_id, $cliente), 'selectOne');

                $from = !empty($web->sender) ? $web->sender : 'servicio@fidelitas.com.ar';
                $to = (env('LED_TEST_MODE') == true) ? env('LED_TEST_EMAIL_ADDR') : ( ($email_alt == '') ? trim($qcontrap->email_contacto) : trim($email_alt) );
                $bcc = (env('LED_TEST_MODE') == true) ? NULL : 'soporte@imperium.com.ar';
                //$replyto = 'soporte@imperium.com.ar';


                if (filter_var($to, FILTER_VALIDATE_EMAIL)) {

                    Mailer::from($from);
                    Mailer::to($to);
                    Mailer::bcc($bcc);
                    //Mailer::replyto($replyto);
                    Mailer::text($mail_content, $mail_subject);
                    return Mailer::send();                          

                }

            }
        }

    }




    public static function generateMailBody($contraparte = NULL) {
        if ($contraparte != NULL) {

            // parámetros fijos
            $app_id = 3;

            $data = SQLConnection::backendStoreProcedure('Imperium_cliente_contraparte_led', array('buscar_contratista_imperium', $contraparte), 'selectOne');

            $cliente = $data->cliente;
            $ncliente = $data->nombre_cliente;
   
            // personalización web para el cliente si existe
            $web = SQLConnection::backendStoreProcedure('multi_web_', array('cliente', NULL, $app_id, $cliente), 'selectOne');

            $template = \View::make('/led/led_email_template')->render(); 
            $protocol = (strpos(env('URL_CONTRATISTA'), 'https://', 0)===0) ? ('https' . chr(58) . chr(47) . chr(47)) : ('http' . chr(58) . chr(47) . chr(47));

            /*$logo_url = (!empty($web->http_host) and !empty($web->uri_email_logo)) ? ($web->uri_email_logo) : 'https://www.fidelitas.com.ar/img/mail_logo.png';
            */
            $logo_url = (!empty($web->http_host) and !empty($web->uri_email_logo)) ? ($web->uri_email_logo) : env('URL_BASE') . '/img/mail_logo.png';

            $body = str_replace(['%%EMAIL_TITLE%%', '%%LOGO_URL%%'], [$ncliente, $logo_url], $template);

            return $body;
        }

    }

    /*
        Dado un id de contraparte y un blade sirve para generar el texto de un mail (personalizado si existiera) en el idioma de la contraparte.
        Reemplaza los textos variables y aplica para contenido del mail o el subject.

        Ejemplos de blade:
        ALTA-USUARIO
        CAMBIO-CLAVE
        RECUPERAR-CLAVE
        DOCUMENTACION-RECHAZADA
        DOCUMENTACION-RECHAZADA-SUBJECT


        El DOC_ID es para obtener información asociada a un documento que se rechaza o se aprueba parcial
        El lista_faltantes es para pasar el texto contenido de la lista de documentos o recursos faltantes en una aprobación parcial.

    */
    public static function generateMailContent($blade = NULL, $contraparte = NULL, $doc_id = NULL, $lista_faltantes = '') {
        if ($blade != NULL AND $contraparte != NULL) {

            $data = SQLConnection::backendStoreProcedure('Imperium_cliente_contraparte_led', array('buscar_contratista_imperium', $contraparte), 'selectOne');

            // parámetros fijos
            $app_id = 3;
            $app_key = 'EMAIL-IMPE';

            $cliente = $data->cliente;
            $ncliente = $data->nombre_cliente;

            // personalización web para el cliente si existe
            $contratista_url = env('URL_CONTRATISTA');
            $protocol = (strpos($contratista_url, 'https://', 0)===0) ? ('https' . chr(58) . chr(47) . chr(47)) : ('http' . chr(58) . chr(47) . chr(47));

            $web = SQLConnection::backendStoreProcedure('multi_web_', array('cliente', NULL, $app_id, $cliente), 'selectOne');

            if (!empty($web)) {
                // existe personalización, busco el host de la web de contratista personalizada en el app_id = 5 (aún no está personalizada, pero igual lo contemplamos a futuro)
                $web_contratista = SQLConnection::backendStoreProcedure('multi_web_', array('cliente', NULL, 5, $cliente), 'selectOne');
                $contratista_url = (!empty($web_contratista->http_host)) ? ($protocol . $web_contratista->http_host) : $contratista_url;
            }


            // Busco texto personalizado del mail para el cliente con el sufijo del ID cliente. Si no existe busco el genérico
            $personalized_blade = $blade . '_' . $cliente;

            $textos = SQLConnection::backendStoreProcedure('traducciones_web', array('select', $app_id, $personalized_blade, $app_key), 'selectOne');
            if (empty($textos)) {
                $textos = SQLConnection::backendStoreProcedure('traducciones_web', array('select', $app_id, $blade, $app_key), 'selectOne');
            }

            $content = $textos->{$data->codigo_idioma};                  

            ////
            $encabezado = '';
            $documento = '';
            $nombre_documento = '';
            $periodo = '';
            $motivo_rechazo = '';
            if ($doc_id > 0) {
                $doc = SQLConnection::backendStoreProcedure('Imperium_Datos_Documento', array($doc_id), 'selectOne');
                if (!empty($doc)) {

                    $encabezado = '<strong>Cliente:</strong> ' . $ncliente;
                    $encabezado = $encabezado . '<br>' . '<strong>Contratista:</strong> ' . $doc->nombre_persona_1 . ' (' . $doc->abreviatura_1 . ' ' . $doc->identificacion_1 . ')';
                    if ($doc->contratista_1 != $doc->contratista) {
                        $encabezado = $encabezado . '<br>' . '<strong>Subcontratista:</strong> ' . $doc->nombre_persona . ' (' . $doc->abreviatura . ' ' . $doc->identificacion . ')';
                    }
                    if ($doc->led_seccion == 'E') {
                        $encabezado = $encabezado . '<br>' . '<strong>Empleado:</strong> ' . $doc->nombre_persona_e . ' (' . $doc->abreviatura_e . ' ' . $doc->identificacion_e . ')';
                    }
                    if ($doc->led_seccion == 'V') {
                        $encabezado = $encabezado . '<br>' . '<strong>Vehículo:</strong> ' . $doc->nombre_vehiculo . ' (' . $doc->dominio . ')';
                    }

                    $documento = '<strong>Documento:</strong> ' . $doc->nombre_tipo_doc;
                    $documento = $documento . '<br>' . '<strong>Período:</strong> ' . $doc->periodo_my;
                    $documento = $documento . '<br>' . '<strong>Plazo de carga:</strong> ' . $doc->plazo_carga;
                    $documento = $documento . '<br>' . '<strong>Ingresado:</strong> ' . $doc->ingresado;
                    $documento = $documento . '<br>' . '<strong>Ingresado por:</strong> ' . $doc->ingresado_por_usuario;
                    if (!empty($doc->vigencia)) {
                        $documento = $documento . '<br>' . '<strong>Vigencia:</strong> ' . $doc->vigencia;
                    }
                    $documento = $documento . '<br>' . '<strong>Estado:</strong> ' . $doc->nombre_estado;

                    $nombre_documento = $doc->nombre_tipo_doc;
                    $periodo = $doc->periodo_my;
                    $motivo_rechazo = $doc->texto_rechazo;
                }
            }

            $source = array('%%CLIENTE%%',
                            '%%NOMBRE_CLIENTE%%',
                            '%%NOMBRE_CONTACTO%%',
                            '%%CONTACTO%%',
                            '%%CONTRAPARTE%%', 
                            '%%CONTRATISTA%%', 
                            '%%ID%%', 
                            '%%IDENTIFICADOR%%', 
                            '%%ABREVIATURA%%', 
                            '%%IDENTIFICACION%%', 
                            '%%NUMERO%%', 
                            '%%CLAVE%%', 
                            '%%PASSWORD%%', 
                            '%%COUNTRY_CODE%%', 
                            '%%CODIGO_PAIS%%', 
                            '%%COUNTRY_NAME%%', 
                            '%%COUNTRY%%', 
                            '%%PAIS%%', 
                            '%%PAIS_SERVICIO%%', 
                            '%%EMAIL%%',
                            '%%EMAIL_CONTACTO%%',
                            '%%USUARIO%%',
                            '%%NOMBRE_USUARIO%%',
                            '%%NOMBRE-USUARIO%%',
                            '%%USERNAME%%',
                            '%%CONTRATISTA_URL%%',
                            '%%URL-CONTRATISTA-IMPERIUM%%',

                            '%%DATOS-ENCABEZADO%%',
                            '%%DOCUMENTO%%',
                            '%%NOMBRE-TIPO-DOC%%',
                            '%%PERIODO%%',
                            '%%MOTIVO-RECHAZO%%',
                            '%%LISTA-FALTANTES%%');

            $replace = array($ncliente,
                            $ncliente, 
                            $data->first_name . ' ' . $data->last_name, 
                            $data->first_name . ' ' . $data->last_name, 
                            $data->nombre_persona,
                            $data->nombre_persona,
                            $data->abreviatura, 
                            $data->abreviatura, 
                            $data->abreviatura, 
                            $data->identificacion, 
                            $data->identificacion, 
                            $data->password, 
                            $data->password,
                            $data->country_code, 
                            $data->country_code, 
                            $data->country_name, 
                            $data->country_name, 
                            $data->country_name,
                            $data->pais_servicio,
                            $data->email,
                            $data->email,
                            $data->username,
                            $data->username,
                            $data->username,
                            $data->username,
                            env('URL_CONTRATISTA'),
                            env('URL_CONTRATISTA'),
                        
                            $encabezado,
                            $documento,
                            $nombre_documento,
                            $periodo,
                            $motivo_rechazo,
                            $lista_faltantes);


            return str_replace($source, $replace, $content);;

        }
    }


    public static function pruebaMailImperium() {

        /*
        107586   = valid.imperium
        */
        $mailaddr = 'luis.prenafeta@vdo3.com';

        $resultado = self::enviarMailImperium('ALTA-USUARIO', 'ALTA-USUARIO-SUBJECT', 107586, $mailaddr);

        echo $resultado;

    }


}
