<?php 
	//Retornar en $elToken o false
	date_default_timezone_set('America/Costa_Rica');
	//require ('conexion.php');
	require ('fe_consultasbd.php'); 
	//require ('../funciones/log.php');
	
	
	$mostrarLog = true;
	$ahora  = strtotime(date('Y-m-d H:i:s'));
//	setLog(date('Y-m-d h:i:s a',$ahora) . 'Ahora',$mostrarLog);
	$bdHoraCierresession = $resultadoToken['refresh_session_limit'];
			
	if($resultadoToken['estado'] != 1 || $resultadoToken['estado_refresh'] == 0 ){
		setLog('RT: La sesion esta cerrada o el ultimo Refresh obtuvo error',$mostrarLog);
		return false;
		$elToken = '...';
	}else {
	
	

	// Sesion de 20 minutos	
	$ambito = 300; //300 son 5 mintos
	$inicioSesion = $bdHoraCierresession - $resultadoToken['refresh_expires_in'];
	$sesionMenosTresMin = $bdHoraCierresession - $ambito;
	$sesionMasTresMin = $inicioSesion + $ambito;	
//	setLog(date('Y-m-d h:i:s a',$inicioSesion).' inicio de sesion',$mostrarLog);	
//	setLog(date('Y-m-d h:i:s a',$bdHoraCierresession).' fin de sesion',$mostrarLog);	
//	setLog(date('Y-m-d h:i:s a',$sesionMenosTresMin).' sesionMenosTresMin',$mostrarLog);
		
	if($ahora > $sesionMenosTresMin && $ahora < $bdHoraCierresession){
		setLog('RT: Sesion abierta pero esta por cerrarse.',$mostrarLog);
		$consulta2 = 'UPDATE wc_token SET estado_refresh = 0 WHERE id = 1;';
		$mysqli->query($consulta2);
		return false;
	}
	
	if($ahora > $bdHoraCierresession){
		setLog('RT: No hay sesion, no se puede generar refresh token.',$mostrarLog);
		$consulta2 = 'UPDATE wc_token SET estado_refresh = 0 WHERE id = 1;';
		$mysqli->query($consulta2);
		return false;		
	} 
	
	if($ahora > $resultadoToken['refresh_token_limit']){
		$curl = curl_init();
		curl_setopt_array($curl, array(
			CURLOPT_URL => $parametros['uriToken'],
			CURLOPT_RETURNTRANSFER => true,
			CURLOPT_ENCODING => '',
			CURLOPT_MAXREDIRS => 10,
			CURLOPT_TIMEOUT => 30,
			CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
			CURLOPT_CUSTOMREQUEST => 'POST',
			CURLOPT_POSTFIELDS => http_build_query([
				'client_id' =>$parametros['client_id'], 
				'refresh_token' =>$resultadoToken['refresh_token'],
				'grant_type' => "refresh_token"
			]),
			CURLOPT_HTTPHEADER => array(
				'cache-control: no-cache',
				'content-type: application/x-www-form-urlencoded'
			),
		));			
		curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
		curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);		
		$response = curl_exec($curl);
		$err = curl_error($curl);
		$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
		curl_close($curl);
	
		if ($err) {                 
			setLog('RT: Error en respuesta de hacienda ('.$code.'-'.$err.').',$mostrarLog);
					$consulta2 = 'UPDATE wc_token SET estado_refresh = 0 WHERE id = 1;';
					$mysqli->query($consulta2);
					return false;
		} else {
		
			$response = json_decode($response); 
			if(isset($response->{'error'})){				
				setLog('RT: Error respuesta hacienda ('.$response->{'error_description'}.')',$mostrarLog);
					$consulta3 = 'UPDATE wc_token SET estado_refresh = 0 WHERE id = 1;';
					$mysqli->query($consulta3);
				return false;
			}
			$refresh_token_limit = strtotime(date('Y-m-d H:i:s')) + $response->{'expires_in'};
			$refresh_session_limit = strtotime(date('Y-m-d H:i:s')) + $response->{'refresh_expires_in'};
			$expire_in = $response->{'expires_in'};
			$refresh_expires_in = $response->{'refresh_expires_in'};
			$refresh_token = $response->{'refresh_token'};
			$access_token = $response->{'access_token'};
			
		 //refresh_session_limit = '$refresh_session_limit' 
				setLog('RT: Se ha generado un Refresh_token correctamente aun no se ha guardado.',$mostrarLog);
				$elToken = $resultadoToken['access_token'];
			
			
			$consulta = "
				UPDATE wc_token SET 
				expires_in = '$expire_in',
				refresh_expires_in = '$refresh_expires_in',
				refresh_token = '$refresh_token',
				access_token = '$access_token',
				refresh_token_limit = '$refresh_token_limit' 			
				WHERE id = 1;";
			if($mysqli->query($consulta)){				
				setLog('RT: Se ha generado un Refresh_token correctamente YA SE GUARDO.',$mostrarLog);
				$elToken = $resultadoToken['access_token'];
			}
		}
	}else{
		setLog('RT: El Refresh_token aun esta vigente.',$mostrarLog);
		$elToken = $resultadoToken['access_token'];
	}


	}
	//Retornar el token
	//refresh_session_limit = '$refresh_session_limit'		
	//Parametros
	//Conexion a hacienda
	//Retornos incorrectos de hacienda
	//Guardar en base de datos