/*
	_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;
}