<?php namespace App\Http\Middleware;
 
use Closure;
use App\Custom\Misc;
use App\Custom\SQLConnection;
use stdClass;
//use Illuminate\Contracts\Routing\Middleware;
use Session;
class CAMEMiddleware {
 
	/**
	 * Handle an incoming request.
	 *
	 * @param  \Illuminate\Http\Request  $request
	 * @param  \Closure  $next
	 * @return mixed
	 */
	public function handle($request, Closure $next){
    $api_key = $request->input('apikey');
		if(empty($api_key)){
			return  response()->json(array('error'=>'2','message' =>'Error: Su api-key no está seteada o es inválida'));
		}

	
		$info = self::obtenerInfoApiKey($api_key);
		$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->cliente['client_id']	= $info->client_id;
		if(!empty($info)){
			if (self::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'=>'3','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'=>'4','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){
			return SQLConnection::backendStoreProcedure('api_key_obtener_info',array($api_key),'selectOne');
	}

	private static function isValidIP($ips){
		$ips = explode(',',$ips);
		if(in_array($_SERVER['REMOTE_ADDR'],$ips) || $ips[0] == 'ALL' ){
			return true;
		}
		return false;
	}

}