<?php namespace App\Http\Controllers;  

use App\Custom\SQLConnection;
use App\Custom\Misc;

use Illuminate\Support\Facades\Response;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Request;

use App\Models\Mailer;
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 = '') {

        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);
                $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($data->email_contacto) : trim($email_alt) );
                /* 09/01/2025: Ahora puede venir mas de una direccion de mail, separada por coma */
                $to = [];
                if ((env('LED_TEST_MODE') == true) ? env('LED_TEST_EMAIL_ADDR'))
                {
                    $to[] = env('LED_TEST_EMAIL_ADDR');
                }
                else 
                {
                    if ($email_alt !== '' and $email_alt !== null) {
                        $email_alt = str_replace(' ','',$email_alt);
                        $email_alt = str_replace(';',',',$email_alt);
                        $to = explode(",", trim($email_alt));
                    } else {
                        if (!is_null($data->email_contacto) && !empty($data->email_contacto)) {
                            $data->email_contacto = str_replace(' ','',$data->email_contacto);
                            $data->email_contacto = str_replace(';',',',$data->email_contacto);
                            $to = explode(",", trim($data->email_contacto));
                        }
                    }
                }
                /**/
                $bcc = (env('LED_TEST_MODE') == true) ? NULL : 'soporte@imperium.com.ar';
                $replyto = 'soporte@imperium.com.ar';

                /* 09/01/2025: No funciona el filter_var_array($to, FILTER_VALIDATE_EMAIL)) cuando los emails son un array */
                $error = 0;
                if (is_array($to))
                {
                    foreach ($to as $key => $to1) {
                        if (!filter_var($to1, FILTER_VALIDATE_EMAIL))
                            { $error = 1; break;}
                    }  
                }
                else 
                {
                    if (!filter_var($to, FILTER_VALIDATE_EMAIL))
                        { $error = 1; }
                }
                
                //if ((is_array($to) && filter_var_array($to, FILTER_VALIDATE_EMAIL)) || (filter_var($to, FILTER_VALIDATE_EMAIL))) {
                if ($error == 0) {
                /**/
                    Mailer::from($from);
                    Mailer::to($to);
                    echo("IMPERIUM EMAIL CONTROLLER 63");
                    // dd($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';

            $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

    */
    public static function generateMailContent($blade = NULL, $contraparte = NULL) {
        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};                  


            $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%%');

            $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'));


            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;

    }


}
