<?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 LEDEmailController extends Controller  {

	public static function encryptString() {
		return (encrypt(Request::input('s')));
	} 
	public static function decryptString() {
		return (decrypt(Request::input('s')));
	} 
    
    public static function enviarMailLED($blade='', $subject='', $contraparte='', $link_expira='', $email_alt='', $link_forced = false, $doc_id=NULL, $transact_id=NULL,$servicio=null) {        

        if ($blade != '' AND $subject != '' AND $contraparte > 0) {
            // parámetros fijos
            $app_id = 3;

            $qcontrap = DB::selectOne('EXEC dbo.LN_contrapartes_ ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?', array('select', $contraparte, null, null, null, null, null, null, null, NULL, NULL, null, null, null, null));
            $cliente = $qcontrap->cliente;

            // modo de login de la contraparte, a menos que sea un link forzado (envío del link a una contraparte cuya modalidad es por Tax ID)
            if ($link_forced == false) {
				$modo_login = SQLConnection::backendStoreProcedure('LN_contrapartes_', array('MODALIDAD_LOGIN', $contraparte, null, null, null, null, null, null, null, null, null, null, null, null, null), 'selectOne');
				$modalidad_login = $modo_login->modalidad_login;
			}
			else {
				$modalidad_login = 'L';
            }

            $body = self::generateMailBody($contraparte,$servicio);
            $content = self::generateMailContent($blade, $contraparte, $link_expira, $doc_id, $transact_id,$servicio);
            $mail_subject = self::generateMailContent($subject, $contraparte, $link_expira);

            // 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_2_', array('cliente', NULL, $app_id, $cliente, null, $servicio), '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 : 'soporteled@fidelitas.com.ar';
            $replyto = 'soporteled@fidelitas.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();                          

            }
        }  
        return false;  
    }


    /* Dado un ID de contraparte, levanta el template de mail y lo personaliza con logo en caso que aplique, excepto el cuerpo del mail.
            Devuelve el html al que luego deberá reemplazarse el contenido
    */
    public static function generateMailBody($contraparte = NULL,$servicio=NULL) {
        if ($contraparte != NULL) {

            // parámetros fijos
            $app_id = 3;

            $qcontrap = DB::selectOne('EXEC dbo.LN_contrapartes_ ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?', array('select', $contraparte, null, null, null, null, null, null, null, NULL, NULL, null, null, null, null));
            $cliente = $qcontrap->cliente;
            $ncliente = $qcontrap->nombre_cliente;            
            if ($cliente == 5546348) {
                /** Chanchada para cambiar el nombre del cliente en caso de ser AMX **/
                $ncliente = ($qcontrap->country_code == 'PY') ? 'AMX PARAGUAY S.A.' : ( ($qcontrap->country_code == 'UY') ? 'AM Wireless Uruguay S.A.' : $ncliente );
            }

            if ($cliente == 7855254) {
                /** Chanchada para cambiar el nombre del cliente en caso de ser VALID **/
                $ncliente = ($qcontrap->country_code == 'BR') ? 'VALID SOLUÇOES S A' : (($qcontrap->country_code != 'AR') ? 'VALID S.A.' : $ncliente);
            }
    

            // personalización web para el cliente si existe
            $web = SQLConnection::backendStoreProcedure('multi_web_2_', array('cliente', NULL, $app_id, $cliente, null, $servicio), 'selectOne');

            $template = \View::make('/led/led_email_template')->render(); 
            $protocol = (strpos(env('URL_LEGAJOS'), '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-LINK
        ALTA-LINK-SUBJECT
        ALTA-TAXID
        CAMBIO-CLAVE
        RECUPERAR-CLAVE
        DOCUMENTACION-RECHAZADA
        DOCUMENTACION-RECHAZADA-SUBJECT

        Parámetro link_expira formato fecha dd/mm/yyyy es opcional

    */
    public static function generateMailContent($blade = NULL, $contraparte = NULL, $link_expira = '', $doc_id = NULL, $transact_id = NULL, $servicio=NULL) {
        if ($blade != NULL AND $contraparte != NULL) {

            // parámetros fijos
            $app_id = 3;
            $app_key = 'EMAIL-LED';

            $qcontrap = DB::selectOne('EXEC dbo.LN_contrapartes_ ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?', array('select', $contraparte, null, null, null, null, null, null, null, NULL, NULL, null, null, null, null));
            $cliente = $qcontrap->cliente;
            $ncliente = $qcontrap->nombre_cliente;            

            if ($cliente == 5546348) {
                /** Chanchada para cambiar el nombre del cliente en caso de ser AMX **/
                $ncliente = ($qcontrap->country_code == 'PY') ? 'AMX PARAGUAY S.A.' : ( ($qcontrap->country_code == 'UY') ? 'AM Wireless Uruguay S.A.' : $ncliente );
            }

            if ($cliente == 7855254) {
                /** Chanchada para cambiar el nombre del cliente en caso de ser VALID **/
                $ncliente = ($qcontrap->country_code == 'BR') ? 'VALID SOLUÇOES S A' : (($qcontrap->country_code != 'AR') ? 'VALID S.A.' : $ncliente);
            }

            // personalización web para el cliente si existe
            $legajos_url = env('LED_WEB_PROVEEDOR_URL');
            $protocol = (strpos($legajos_url, 'https://', 0)===0) ? ('https' . chr(58) . chr(47) . chr(47)) : ('http' . chr(58) . chr(47) . chr(47));

            $web = SQLConnection::backendStoreProcedure('multi_web_2_', array('cliente', NULL, $app_id, $cliente, null,$servicio), 'selectOne');
            if (!empty($web)) {
                // existe personalización, busco el host de la web de legajos personalizada en el app_id = 4
                $web_legajos = SQLConnection::backendStoreProcedure('multi_web_2_', array('cliente', NULL, 4, $cliente, null, $servicio), 'selectOne');
                $legajos_url = (!empty($web_legajos->http_host)) ? ($protocol . $web_legajos->http_host) : $legajos_url;
            }

            $link_expira = !empty($link_expira) ? str_replace('-', '/', $link_expira) : NULL;
            $expira = !empty($link_expira) ? date_format(date_create_from_format('!d/m/Y', $link_expira), 'Y-m-d') : NULL;
            
            $restan_dias = '';
            $autologin = '';
            $link = '';

            // el link de redirección a pantalla de pago, en caso que sea necesario el mail para requerir PREPAGO antes de cargar información
            $link_pago = '';

            if ($expira != NULL) {
                $hoy = new DateTime('today');

                $days_interval = date_diff( $hoy , date_create_from_format('!d/m/Y', $link_expira) );
                $restan_dias = $days_interval->format('%d') + 1;

                // Este es el string que viene luego del '/autologin?q='
                $autologin = encrypt( $qcontrap->country_code . '|' . $qcontrap->identificador . '|' . $qcontrap->identificacion . '|' . $contraparte . '|' . $expira );
                $link = '<a href="' . $legajos_url . '/autologin?q=' . $autologin . '">';

                // Link para prepago
                $trans = (NULL != $transact_id) ? '|' . $transact_id : '';
                $autologin_pago = encrypt( $qcontrap->country_code . '|' . $qcontrap->identificador . '|' . $qcontrap->identificacion . '|' . $contraparte . '|' . $expira . '|pago' . $trans);
                $link_pago = '<a href="' . $legajos_url . '/autologin?q=' . $autologin_pago . '">';

            }


            // datos de documentacion rechazada
            $doc_rechazada = '';
            if ($doc_id != NULL) {
                $doc = SQLConnection::backendStoreProcedure('LN_docs_', array('select', $doc_id, null, null, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, null, NULL), 'selectOne');

                if ($doc->estado_doc == 'R') {
                    $doc_rechazada = $doc_rechazada . '<strong>Documento: </strong>' . $doc->nombre_tipo_doc . ( ($doc->es_balance > 0 OR $doc->es_manif_bienes > 0) ? ' al ' . $doc->fin_ejercicio : '' ) . '<br />';
                    $doc_rechazada = $doc_rechazada . '<strong>Plazo de carga: </strong>' . $doc->vencimiento_carga . '<br />';
                    $doc_rechazada = $doc_rechazada . '<strong>Rechazado el: </strong>' . $doc->rechazado . '<br />';
                    $doc_rechazada = $doc_rechazada . '<strong>Rechazado por: </strong>' . $doc->rechazado_por_alias . '<br />';
                    $doc_rechazada = $doc_rechazada . '<strong>Motivo del rechazo: </strong>' . $doc->texto_rechazo . '<br />';
                }
            }

            // 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->{$qcontrap->codigo_idioma};                  

            //$template = \View::make('/led/led_email_template')->render();               
            //$content = str_replace(['%%EMAIL_TITLE%%', '%%EMAIL_CONTENT%%'], [$ncliente, $body], $template);      

            if (!empty($doc)) {

                // Busco la traducción del tipo de documento
                $trad = Traducciones::traduccionesGet(4, 'home legajos', $doc->nombre_tipo_doc);
                $nombre = !empty($trad) ? $trad->{$qcontrap->codigo_idioma} : $doc->nombre_tipo_doc;

                $source = array('%%CLIENTE%%',
                                            '%%NOMBRE_CONTACTO%%',
                                            '%%CONTACTO%%',
                                            '%%CONTRAPARTE%%', 
                                            '%%LINK%%', 
                                            '%%LINK_PAGO%%', 
                                            '%%LINK_EXPIRA%%', 
                                            '%%RESTAN_DIAS%%', 
                                            '%%FECHA_LIMITE%%', 
                                            '%%ID%%', 
                                            '%%IDENTIFICADOR%%', 
                                            '%%NUMERO%%', 
                                            '%%CLAVE%%', 
                                            '%%CLAVE_EXPIRA%%', 
                                            '%%COUNTRY_CODE%%', 
                                            '%%COUNTRY_NAME%%', 
                                            '%%PAIS%%', 
                                            '%%CODIGO_PAIS%%', 
                                            '%%EMAIL_CONTACTO%%',
                                            '%%LEGAJOS_URL%%',
                                            '%%DOCUMENTACION_RECHAZADA%%',
                                            '%%TEXTO_ADICIONAL%%',
                                            '%%DOCUMENTO%%',
                                            '%%PLAZO_CARGA%%',
                                            '%%RECHAZADO%%',
                                            '%%RECHAZADO_FECHA_HORA%%',
                                            '%%RECHAZADO_POR%%',
                                            '%%MOTIVO_RECHAZO%%');

                $replace = array($ncliente, 
                                            $qcontrap->nombre_contacto, 
                                            $qcontrap->nombre_contacto, 
                                            $qcontrap->nombre_persona,
                                            $link, 
                                            $link_pago, 
                                            $link_expira, 
                                            $restan_dias, 
                                            $link_expira, 
                                            $qcontrap->abreviatura, 
                                            $qcontrap->abreviatura, 
                                            $qcontrap->identificacion, 
                                            $qcontrap->clave, 
                                            $qcontrap->clave_expira, 
                                            $qcontrap->country_code, 
                                            $qcontrap->country_name, 
                                            $qcontrap->country_name, 
                                            $qcontrap->country_code, 
                                            $qcontrap->email_contacto,
                                            $legajos_url,
                                            $doc_rechazada,
                                            '',
                                            $nombre,
                                            $doc->vencimiento_carga,
                                            $doc->rechazado,
                                            $doc->rechazado,
                                            $doc->rechazado_por_alias,
                                            $doc->texto_rechazo);

            }
            else {

                $source = array('%%CLIENTE%%',
                                            '%%NOMBRE_CONTACTO%%',
                                            '%%CONTACTO%%',
                                            '%%CONTRAPARTE%%', 
                                            '%%LINK%%', 
                                            '%%LINK_PAGO%%', 
                                            '%%LINK_EXPIRA%%', 
                                            '%%RESTAN_DIAS%%', 
                                            '%%FECHA_LIMITE%%', 
                                            '%%ID%%', 
                                            '%%IDENTIFICADOR%%', 
                                            '%%NUMERO%%', 
                                            '%%CLAVE%%', 
                                            '%%CLAVE_EXPIRA%%', 
                                            '%%COUNTRY_CODE%%', 
                                            '%%COUNTRY_NAME%%', 
                                            '%%PAIS%%', 
                                            '%%CODIGO_PAIS%%', 
                                            '%%EMAIL_CONTACTO%%',
                                            '%%LEGAJOS_URL%%',
                                            '%%DOCUMENTACION_RECHAZADA%%',
                                            '%%TEXTO_ADICIONAL%%');

                $replace = array($ncliente, 
                                            $qcontrap->nombre_contacto, 
                                            $qcontrap->nombre_contacto, 
                                            $qcontrap->nombre_persona,
                                            $link, 
                                            $link_pago, 
                                            $link_expira, 
                                            $restan_dias, 
                                            $link_expira, 
                                            $qcontrap->abreviatura, 
                                            $qcontrap->abreviatura, 
                                            $qcontrap->identificacion, 
                                            $qcontrap->clave, 
                                            $qcontrap->clave_expira, 
                                            $qcontrap->country_code, 
                                            $qcontrap->country_name, 
                                            $qcontrap->country_name, 
                                            $qcontrap->country_code, 
                                            $qcontrap->email_contacto,
                                            $legajos_url,
                                            $doc_rechazada,
                                            '');


            }

            return str_replace($source, $replace, $content);;

        }
    }

}
