//
// Admin player netstats display
// Using NetStats_* functions.
//
// -Rcon login admin then:
// /pnetstats2 (playerid)
//

#include <a_samp>
#include "../include/gl_common.inc"

#define ADMINFS_MESSAGE_COLOR 0xFF444499
#define ADMIN_NETSTATS_DIALOGID 12899

new gNetStatsPlayerId = INVALID_PLAYER_ID;
new gNetStatsDisplayId = INVALID_PLAYER_ID;

new gNetStatsTimerId = 0;

forward NetStatsDisplay();

//------------------------------------------------

public OnFilterScriptInit()
{
	print("\n--Admin Netstats FS loaded.\n");
	return 1;
}

//------------------------------------------------

BuildPlayerNetstatString(playerid, ret_str[], ret_str_len)
{
	new szPlayerIpPort[64+1];
	NetStats_GetIpPort(playerid, szPlayerIpPort, 64);
	
	format(ret_str, ret_str_len, "IP_Port: %s\nConnected Time (ms): %d\nConnection Status: %d\nPacket Loss: %.2f\nMessages Recv: %d\nMessages Sent: %d\nMessages/sec: %d",
	        szPlayerIpPort,
	        NetStats_GetConnectedTime(playerid),
	        NetStats_ConnectionStatus(playerid),
	        NetStats_PacketLossPercent(playerid),
	        NetStats_MessagesReceived(playerid),
	        NetStats_MessagesSent(playerid),
	        NetStats_MessagesRecvPerSecond(playerid));
}

//------------------------------------------------

public NetStatsDisplay()
{
	new netstats_str[1024+1];
	BuildPlayerNetstatString(gNetStatsDisplayId, netstats_str, 1024);
	ShowPlayerDialog(gNetStatsPlayerId, ADMIN_NETSTATS_DIALOGID, DIALOG_STYLE_MSGBOX, "Player NetStats", netstats_str, "Ok", "");
}

//------------------------------------------------

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(!IsPlayerAdmin(playerid)) return 0; // this is an admin only script

	if(dialogid == ADMIN_NETSTATS_DIALOGID) {
		KillTimer(gNetStatsTimerId);
		gNetStatsPlayerId = INVALID_PLAYER_ID;
		return 1;
	}
	
	return  0;
}

//------------------------------------------------

public OnPlayerCommandText(playerid, cmdtext[])
{
	new cmd[256+1];
	new	idx;

	if(!IsPlayerAdmin(playerid)) return 0;
	
	cmd = strtok(cmdtext, idx);
	
    // netstats command
	if(strcmp("/pnetstats2", cmd, true) == 0)
	{
	    new tmp[128];
		tmp = strtok(cmdtext, idx);
		if(!strlen(tmp)) { return 1; }
		 
	    gNetStatsPlayerId = playerid;
	    gNetStatsDisplayId = strval(tmp);
	    
	    NetStatsDisplay();
	    gNetStatsTimerId = SetTimer("NetStatsDisplay", 3000, true); // this will refresh the display every 3 seconds
	    return 1;
	}
	
	return 0;
}
//------------------------------------------------
