<?php

namespace App\Http\Middleware;

use Closure;
use App\Custom\Misc;
use App\Custom\SQLConnection;
use Request;
use Session;
use stdClass;
use App\http\Controllers\ApiController;
class Api {
  public function handle($request, Closure $next){
    $api_key  = isset($_POST['apikey']) ? $_POST['apikey'] : '';
	$idioma = ( isset($_POST['idioma']) && ($_POST['idioma'] == 'eng' || $_POST['idioma'] == 'por' || $_POST['idioma'] == 'spa' ) ) ? $_POST['idioma'] : 'spa';
		if(empty($api_key)){
			return  response()->json(array('error'=>'1','message' =>'Error: Su api-key no está seteada o es inválida'));
		}
		/* 08/02/2022: en la funcion obtenerInfoApiKey, llamamos al SP [api_key_obtener_info_2022], que hace mas controles(de cliente, usuario, topes de consumos) */
		$url = explode('?',$_SERVER['REQUEST_URI'])[0];
		$info = self::obtenerInfoApiKey($api_key,$url);
		//
		//echo($api_key.' - '.$url); die();
		if(empty($info)){
			return  response()->json(array('error'=>'1.0','message' =>'Error: Su api-key no está seteada o es inválida'));
		} else {
			/*if ($info->error_token !== null) {
				return response()->json(array('error'=>'1.1','message' =>'Error: ' . $info->error_token . ', por favor contactese con el area comercial de Fidelitas al +54 11 5254 9950')); 
			}*/
			if ($info->error_cliente !== null) {
				return response()->json(array('error'=>'1.2','message' =>'Error: ' . $info->error_cliente . ', por favor contactese con el area comercial de Fidelitas al +54 11 5254 9950')); 
			}
			if ($info->error_usuario !== null) {
				return response()->json(array('error'=>'1.3','message' =>'Error: ' . $info->error_usuario . ', por favor contactese con el area comercial de Fidelitas al +54 11 5254 9950')); 
			}
			if ($info->error_consumos !== null) { 
				return response()->json(array('error'=>'1.4','message' =>'Error: ' . $info->error_consumos . ', por favor contactese con el area comercial de Fidelitas al +54 11 5254 9950')); 
			}
		}
		
		$usuario = new stdClass();
		$usuario->user_id 							= $info->user_id;
		$usuario->first_name 						= $info->first_name;
		$usuario->last_name 						= $info->last_name;
		$usuario->email 							= $info->email;
		$usuario->producto 							= $info->producto;
		$usuario->cliente['client_id']	= $info->client_id;
		$usuario->codigo_idioma 					= $idioma;
		if(!empty($info)){
			/* 8/2/2022: sacamos el ver_consumos, porque lo hacemos en el SP que llama la funcion aneterior (obtenerInfoApiKey)
			$ver_consumos = self::ControlConsumos($info->client_id, $info->user_id, $info->producto); 
			if (!empty($ver_consumos))
			{
				if ($ver_consumos->permitir == '0')
				{
				if ($ver_consumos->mensaje == NULL) { $ver_consumos->mensaje = 'Usuario no autorizado'; }
				return  response()->json(array('error'=>'1','message' => $ver_consumos->mensaje . ', por favor contactese con el area comercial de Fidelitas al +54 11 5254 9950'));
				}
			}*/
			if (Api::isValidIP($info->ip)) {
				Session::put('usuario',$usuario);
				Session::put('externo',true);
				Session::put('sesion_externa',true);
				return $next($request);
			}else{
				return  response()->json(array('error'=>'1','message' =>'Error: La IP proporciona es inválida, por favor contactese con el area comercial de Fidelitas al +54 11 5254 9950 , su IP es : '. $_SERVER['REMOTE_ADDR']));
			}
		}else{
			return  response()->json(array('error'=>'2','message' =>'Error: Su api-key proporcionada es inválida,por favor contactese con el area comercial de Fidelitas al +54 11 5254 9950'));
		}
	}

	private static function obtenerInfoApiKey($api_key,$url=null){
			return SQLConnection::backendStoreProcedure('api_key_obtener_info_2022',array($api_key,$url),'selectOne');
	}

	private static function isValidIP($ips){
		$ips = explode(',',$ips); 
		if(in_array($_SERVER['REMOTE_ADDR'],$ips) || $ips[0] == 'ALL' ){ 
			return true;

		}
		return false;
	}


	private static function ControlConsumos($cliente, $usuario, $prod){
		$ver_consumos = SQLConnection::backendStoreProcedure('obtener_control_consumos',array($cliente, $usuario, $prod),'selectOne');
		return $ver_consumos;
	}

}