/*
	_bot_http
	Author: INeedGames
	Date: 09/26/2020
	The HTTP module to use with IW4X's gsc funcs
*/

#include maps\mp\bots\_bot_utility;

/*
	Does the version check, if we are up too date
*/
doVersionCheck()
{
	remoteVersion = getRemoteVersion();

	if ( !isDefined( remoteVersion ) )
	{
		PrintConsole( "Error getting remote version of Bot Warfare.\n" );
		return false;
	}

	if ( level.bw_VERSION != remoteVersion )
	{
		PrintConsole( "There is a new version of Bot Warfare!\n" );
		PrintConsole( "You are on version " + level.bw_VERSION + " but " + remoteVersion + " is available!\n" );
		return false;
	}

	PrintConsole( "You are on the latest version of Bot Warfare!\n" );
	return true;
}

/*
	Will attempt to retreive waypoints from the internet
*/
getRemoteWaypoints( mapname )
{
	url = "https://raw.githubusercontent.com/ineedbots/iw4x_waypoints/master/" + mapname + "_wp.csv";
	filename = "waypoints/" + mapname + "_wp.csv";

	PrintConsole( "Attempting to get remote waypoints from " + url + "\n" );
	res = getLinesFromUrl( url, filename );

	if ( !res.lines.size )
		return;

	waypointCount = int( res.lines[0] );

	waypoints = [];
	PrintConsole( "Loading remote waypoints...\n" );

	for ( i = 1; i <= waypointCount; i++ )
	{
		tokens = tokenizeLine( res.lines[i], "," );

		waypoint = parseTokensIntoWaypoint( tokens );

		waypoints[i - 1] = waypoint;
	}

	if ( waypoints.size )
	{
		level.waypoints = waypoints;
		PrintConsole( "Loaded " + waypoints.size + " waypoints from remote.\n" );
	}
}

/*
	Returns the version of bot warfare found on the internet
*/
getRemoteVersion()
{
	request = httpGet( "https://raw.githubusercontent.com/ineedbots/iw4x_waypoints/master/version.txt" );

	if ( !isDefined( request ) )
		return undefined;

	request waittill( "done", success, data );

	if ( !success )
		return undefined;

	return strtok( data, "\n" )[0];
}

/*
	Returns an array of each line from the response of the http url request
*/
getLinesFromUrl( url, filename )
{
	result = spawnStruct();
	result.lines = [];

	request = httpGet( url );

	if ( !isDefined( request ) )
		return result;

	request waittill( "done", success, data );

	if ( !success )
		return result;

	fileWrite( filename, data, "write" );

	line = "";

	for ( i = 0; i < data.size; i++ )
	{
		c = data[i];

		if ( c == "\n" )
		{
			result.lines[result.lines.size] = line;

			line = "";
			continue;
		}

		line += c;
	}

	result.lines[result.lines.size] = line;

	return result;
}