<?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 DB;
use DateTime;
use stdClass; 


class PEPControllerV2 extends Controller  {

    static function index() {
        echo("hola");
    }

    private static function obtenerDatosLogin($metodo,$forzar_login){
        if($forzar_login=="N"){
            $datos =  SQLConnection::backendStoreProcedure('PEP_obtener_datos_login', array($metodo),'selectOne');
        }
        if(!empty($datos) && $forzar_login == "N"){
          session::put($metodo,$datos);
          return $datos;
        } else {
            //TODO: UNKNOW METHOD NO EXISTE EN PROYECTO
            $login = self::ConexionWS();
            if ($login==true){
                $datos =  SQLConnection::backendStoreProcedure('PEP_obtener_datos_login', array($metodo),'selectOne');
                session::put($metodo,$datos);
            } else {
                $datos = new stdClass(); 
                $datos->error = "No ha podido establecer la conexion con Worldsys"; 
            }
            return $datos;
        }
    }

    /* 
    ESTA FUNCION SE ENCARGA DE OBTENER EL NUEVO (TOKEN Y FECHA DE EXPIRACION) Y LOS GUARDAR 
    LOS REGISTROS.
    */
    public static function ConexionWS_Original() {
        $user = env('PEP_USERNAME');
        $pass = env('PEP_PASSWORD');
        $curl = curl_init();
        $metodo = env('PEP_SERVICIO');

        curl_setopt_array($curl, [
            CURLOPT_URL => env('PEP_LOGIN_N'),
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => "",
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 30,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => "POST",
            CURLOPT_POSTFIELDS => "{\n \"userName\": \"$user\",\n \"password\": \"$pass\"\n}\n",
            CURLOPT_HTTPHEADER => ["Content-Type: application/json"],
        ]);

        $response = curl_exec($curl);
        $err = curl_error($curl);

        curl_close($curl);

        /*if (env('BACKEND')!=='BACKEND') {
            $mensajeCurl = 'CurlPEPlogin Error:' . $err . ' - Response:' . $response;
        }*/

        if ($err) {
            //return json_encode("cURL Error #:" . $err);
            return false;
        } else {
            //echo(var_dump($response));
            //return $response;

            $resp = json_decode($response); 
            if(isset($resp->authenticationToken) && isset($resp->tokenExpirationUtc)){
                $token = $resp->authenticationToken;
                $expiracion = $resp->tokenExpirationUtc;
                $expiracion = new DateTime($expiracion);
                $expiracion =  $expiracion->format('Y-m-d H:i:s');
                SQLConnection::backendStoreProcedure('PEP_guardar_autenticacion', array($token,'',$expiracion,$metodo));
                return true;
            }
            return false;
        }
    }

    static function fechaVencimientoToken($segundos) {
        date_default_timezone_set('America/Argentina/Buenos_Aires');
        $segundos = (int) $segundos;
        return date('Y-m-d H:i:s', time()+$segundos);
    }

    static function pedirToken() {
        try {
            $metodo = env('PEP_NV_SERVICIO');
            $credenciales = SQLConnection::backendStoreProcedure('PEP_obtener_datos_login', array($metodo),'selectOne');
            
            $token = '';
            $expiracion = '';
            
            $user = env('PEP_NV_USERNAME');
            $pass = env('PEP_NV_PASSWORD');

            $data = json_encode(array("userNameOrEmailAddress" => $user, "password" => $pass));

            if(!is_null($credenciales)) {
                return $credenciales->token;
                //return $credenciales;
            } else {
                $curl = curl_init();

                curl_setopt_array($curl, array(
                    CURLOPT_URL => 'https://fidelitas.apicompliance.worldsysweb.com/api/TokenAuth/Authenticate',
                    CURLOPT_RETURNTRANSFER => true,
                    CURLOPT_ENCODING => '',
                    CURLOPT_MAXREDIRS => 10,
                    CURLOPT_TIMEOUT => 0,
                    CURLOPT_FOLLOWLOCATION => true,
                    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
                    CURLOPT_CUSTOMREQUEST => 'POST',
                    CURLOPT_POSTFIELDS => $data,
                    CURLOPT_HTTPHEADER => array(
                        'Content-Type: application/json'
                    ),
                ));

                $response = curl_exec($curl);
                curl_close($curl);

                $resp = json_decode($response)->result;
                $token = $resp->accessToken;
                $expiracion = self::fechaVencimientoToken($resp->expireInSeconds);
                SQLConnection::backendStoreProcedure('PEP_guardar_autenticacion', array($token,'',$expiracion,$metodo));

                return $token;
            }
        } catch (\Throwable $th) {
            $mensaje = 'Error al generar token para nuevo servicio de ws <br> Error: '.$th->getMessage().'<br>Linea: '.$th->getLine();
            Misc::enviarMail_errores_api($mensaje);
            return null;
        }

    }

    static function consultaWs() {
        $token = self::pedirToken();

        $identificacion = env('PEP_NV_IDENTIFICACION');
        //$nombre = "TINELLI MARCELO HUGO";
        $nombre = '';
        //$dni = '13214623';
        $dni = '';
        $idTributaria = '20132146234';
        //$idTributaria = '20329232043';
        //$idTributaria = '';
        $confBusqueda = env('PEP_NV_BUSQUEDA');
        $pais = 'AR';

        $data = json_encode(array("Identification" => $identificacion, "Nombre" => $nombre, "Documento" => $dni, "IdTributaria" => $idTributaria, "ConfigurationName" => $confBusqueda));

        $curl = curl_init();

        curl_setopt_array($curl, array(
            CURLOPT_URL => 'https://worldsys.apicompliance.worldsysweb.com/api/ldi/v1/Evaluate',
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => '',
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 0,
            CURLOPT_FOLLOWLOCATION => true,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => 'POST',
            CURLOPT_POSTFIELDS => $data,
            CURLOPT_HTTPHEADER => array(
                'Authorization: Bearer '.$token,
                'Content-Type: application/json'
              ),
        ));

        $response = curl_exec($curl);
        curl_close($curl);

        $lista = array();

        $response = json_decode($response, true)['hits'];

        foreach ($response as $key) {
            if($pais == 'AR') {
                //-- Esta es la seccion si se envia el parametro 'AR'
                //$p = substr(strtoupper($key['residencia']),0,2);
                if($pais == $key['residencia'] and ($key['idTributaria'] == $idTributaria)) {
                    $persona = new stdClass;
                    $persona->nombre = isset($key['nombre']) ? $key['nombre'] : '';
                    $persona->documento = isset($key['documento']) ? $key['documento'] : '';
                    $persona->taxId = isset($key['idTributaria']) ? $key['idTributaria'] : '';
                    $persona->fechaNovedad = isset($key['fechaNovedad']) ? $key['fechaNovedad'] : '';
                    $persona->cargo = isset($key['cargo']) ? $key['cargo'] : '';
                    $persona->domicilio = isset($key['domicilio']) ? $key['domicilio'] : '';
                    $persona->institucion = isset($key['institucion']) ? $key['institucion'] : '';
                    $persona->pais = isset($key['pais']) ? $key['pais'] : '';
                    $persona->relacion = isset($key['relacion']) ? $key['relacion'] : '';
                    $persona->residencia = isset($key['residencia']) ? $key['residencia'] : '';
                    $persona->lista_codigo = isset($key['fuente']['kind']['code']) ? $key['fuente']['kind']['code'] : '';
                    $persona->lista_label = isset($key['fuente']['kind']['legend']) ? $key['fuente']['kind']['legend'] : '';
                    $persona->lista_resumen = isset($key['fuente']['caption']) ? $key['fuente']['caption'] : '';
                    $persona->lista_descripcion = isset($key['fuente']['description']) ? $key['fuente']['description'] : '';
                    $persona->url = isset($key['url']) ? $key['url'] : '';
                    $lista[] = $persona;
                }
            } else {
                //-- Seccion para la busqueda fuera de 'AR'
                $persona = new stdClass;
                $persona->nombre = isset($key['nombre']) ? $key['nombre'] : '';
                $persona->documento = isset($key['documento']) ? $key['documento'] : '';
                $persona->taxId = isset($key['idTributaria']) ? $key['idTributaria'] : '';
                $persona->fechaNovedad = isset($key['fechaNovedad']) ? $key['fechaNovedad'] : '';
                $persona->cargo = isset($key['cargo']) ? $key['cargo'] : '';
                $persona->domicilio = isset($key['domicilio']) ? $key['domicilio'] : '';
                $persona->institucion = isset($key['institucion']) ? $key['institucion'] : '';
                $persona->pais = isset($key['pais']) ? $key['pais'] : '';
                $persona->relacion = isset($key['relacion']) ? $key['relacion'] : '';
                $persona->residencia = isset($key['residencia']) ? $key['residencia'] : '';
                $persona->lista_codigo = isset($key['fuente']['kind']['code']) ? $key['fuente']['kind']['code'] : '';
                $persona->lista_label = isset($key['fuente']['kind']['legend']) ? $key['fuente']['kind']['legend'] : '';
                $persona->lista_resumen = isset($key['fuente']['caption']) ? $key['fuente']['caption'] : '';
                $persona->lista_descripcion = isset($key['fuente']['description']) ? $key['fuente']['description'] : '';
                $persona->url = isset($key['url']) ? $key['url'] : '';
                $lista[] = $persona;
            }
                        
        }
        //echo(var_dump($response[0]['fuente']['name']));
        //echo(var_dump($lista));
        return json_encode($lista);
    }
}