#include <core>
#include <console>
#include <string>
#include <admin>
#include <adminlib>
 
#define MAX_CMDS 10
#define MAX_OPTS 4
 
/* Set this to 1, if you want to use the old method */
#define OLD 0
 
new STRING_VERSION[MAX_DATA_LENGTH] = "1.1";
 
new gsKeywordsMe[MAX_CMDS][MAX_COMMAND_LENGTH];
new gsKeywordsRank[MAX_CMDS][MAX_COMMAND_LENGTH];
new gsURL[MAX_DATA_LENGTH];
new gsPrefix[MAX_CMDS][MAX_COMMAND_LENGTH];
new giKeywordsMe,giKeywordsRank,giPrefix;
 
display_array(iNumber,aArray[MAX_CMDS][]){
	for(new i=0;i<iNumber;i++){
		selfmessage(aArray[i]);
	}
	return PLUGIN_CONTINUE;
}
 
change_array(sVault[],sValue[],iNumber,aArray[][]){
	new sData[MAX_DATA_LENGTH]="";
	new iMerk=0;
 
	for(new i=0;i<iNumber;i++){
		if(strcmp(aArray[i],sValue)!=0){
			strcat(sData,aArray[i],MAX_DATA_LENGTH);
			strcat(sData," ",MAX_DATA_LENGTH);
		}
		else{
			iMerk=1;
		}
	}
	if(!iMerk){
		strcat(sData,sValue,MAX_DATA_LENGTH);
	}
	else{
		strtrim(sData," ",1);
	}
 
	set_vaultdata(sVault,sData);
 
	load_data();
 
	return PLUGIN_CONTINUE;
}
 
change_value(sText[],sValue[]){
 
	set_vaultdata(sText,sValue);
	strcpy(gsURL,sValue,MAX_DATA_LENGTH);
 
	return PLUGIN_CONTINUE;
}
 
 
public admin_ps_set(HLCommand,HLData,HLUserName,UserIndex){
	new aCommands[MAX_OPTS][MAX_COMMAND_LENGTH]={"PREFIX","STATSME","STATSRANK","URL"};
	new sText[MAX_TEXT_LENGTH];
	new iMerk=-1;
	new sValue[MAX_DATA_LENGTH];
	new sCvar[MAX_DATA_LENGTH];
	new sUser[MAX_NAME_LENGTH];
 
	convert_string(HLData,sValue,MAX_DATA_LENGTH);
	convert_string(HLUserName,sUser,MAX_NAME_LENGTH);
	strbreak(sValue,sCvar,sValue,MAX_DATA_LENGTH);
	strtrim(sValue," ",2);
	strtrim(sCvar," ",2);
 
	for(new i=0;i<MAX_OPTS;i++){
		if(strcasecmp(aCommands[i],sCvar)==0){
			iMerk=i;
		}
	}
 
	if(iMerk<0 && strlen(sCvar)>0){
		selfmessage("Option not found!");
		strinit(sCvar);
	}
 
	if(!strlen(sCvar)){
		selfmessage("Possible Options:");
		for(new i=0;i<MAX_OPTS;i++){
			selfmessage(aCommands[i]);
		}
		return PLUGIN_HANDLED;
	}
 
	if(!strlen(sValue)){
		snprintf(sText,MAX_TEXT_LENGTH,"Current value(s) of option %s:",aCommands[iMerk]);
		selfmessage(sText);
		switch (iMerk) {
			case 0:
				display_array(giPrefix,gsPrefix);
			case 1:
				display_array(giKeywordsMe,gsKeywordsMe);
			case 2:
				display_array(giKeywordsRank,gsKeywordsRank);
			case 3:
				selfmessage(gsURL);
		}
		return PLUGIN_HANDLED;
	}
 
	snprintf(sText,MAX_TEXT_LENGTH,"BK_PS_%s",aCommands[iMerk]);
 
	switch (iMerk) {
		case 0:
			change_array(sText,sValue,giPrefix,gsPrefix);
		case 1:
			change_array(sText,sValue,giKeywordsMe,gsKeywordsMe);
		case 2:
			change_array(sText,sValue,giKeywordsRank,gsKeywordsRank);
		case 3:
			change_value(sText,sValue);
	}
	selfmessage("Option changed");
 
	return PLUGIN_HANDLED;
}
 
public admin_stats(HLCommand,HLData,HLUserName,UserIndex) {
	new sData[MAX_DATA_LENGTH];
	new sPrefix[MAX_DATA_LENGTH];
	new sCommand[MAX_COMMAND_LENGTH];
	new sName[MAX_NAME_LENGTH];
	new sRest[MAX_DATA_LENGTH]="";
	new iPrefix=-1;
 
	convert_string(HLCommand,sCommand,MAX_COMMAND_LENGTH);
	convert_string(HLData,sData,MAX_DATA_LENGTH);
	convert_string(HLUserName,sName,MAX_NAME_LENGTH);
	strstripquotes(sData);
 
	if(streq(sCommand,"say")){
		if(!giPrefix || !giKeywordsMe || !giKeywordsRank){
			return PLUGIN_CONTINUE;
		}
		strncpy(sPrefix,sData,1,MAX_DATA_LENGTH);
		for(new i=0;i<giPrefix;i++){
			if(streq(sPrefix,gsPrefix[i])){
				iPrefix=i;
				break;
			}
		}
		if(iPrefix<0){
			return PLUGIN_CONTINUE;
		}
		strtrim(sData,gsPrefix[iPrefix],0);
		if(strcount(sData,' ')>0){
			strbreak(sData,sData,sRest,MAX_DATA_LENGTH);
		}
		for(new i=0;i<giKeywordsMe;i++){
			if(streq(sData,gsKeywordsMe[i])){
				if(!strlen(sRest)){
					get_userAuthID(sName,sRest,MAX_AUTHID_LENGTH);
				}
				else{
					get_username(sName,sName,MAX_NAME_LENGTH);
					get_userAuthID(sName,sRest,MAX_AUTHID_LENGTH);
				}
				open_motd(sRest,sName,0);
				return PLUGIN_HANDLED;
			}
		}
		for(new i=0;i<giKeywordsRank;i++){
			if(streq(sData,gsKeywordsRank[i])){
				get_username(sName,sName,MAX_NAME_LENGTH);
				open_motd("",sName,1);
				return PLUGIN_HANDLED;
			}
		}
		return PLUGIN_CONTINUE;
	}
	if(strcount(sData,' ')>0){
		strbreak(sData,sData,sRest,MAX_DATA_LENGTH);
	}
	if(!strlen(sRest)){
		get_userAuthID(sName,sRest,MAX_AUTHID_LENGTH);
	}
	else{
		get_username(sName,sName,MAX_NAME_LENGTH);
		if(!get_userAuthID(sName,sRest,MAX_AUTHID_LENGTH)){
			strcpy(sRest,sName,MAX_AUTHID_LENGTH);
		}
	}
	open_motd(sRest,sName,0);
 
	return PLUGIN_HANDLED;
}
 
open_motd(sAuthID[],sName[],iSite){
	new sText[2048]="<html>^n<head>^n<meta http-equiv=^"REFRESH^" content=^"0;url=%s^">^n</head>^n<body>^n<div>Searching...</div>^n</body>^n</html>";
#if OLD == 1
	new sURL[MAX_TEXT_LENGTH]="%s?site=%d&id=%s";
	snprintf(sURL,MAX_TEXT_LENGTH,sURL,gsURL,iSite,sAuthID);
#else
	new sURL[MAX_TEXT_LENGTH];
	if(iSite){
		strcpy(sURL,gsURL,MAX_TEXT_LENGTH);
	}
	else{
		snprintf(sURL,MAX_TEXT_LENGTH,"%s?andor=exact&search=%s",gsURL,sAuthID);
	}
#endif
	snprintf(sText,2048,sText,sURL);
	motd(sName,sText);
	execclient(sName,"escape");
 
	return PLUGIN_CONTINUE;
}
 
public plugin_init() {
	new sData[MAX_DATA_LENGTH];
 
	plugin_registerinfo("BKs Psychostats Plugin","Opens Psychostats in Motd-Window",STRING_VERSION);
	plugin_registercmd("admin_ps_set","admin_ps_set",ACCESS_CONFIG,"admin_ps_set <Option> <Value>: Sets the options of psychostats plugin");
	plugin_registercmd("admin_stats","admin_stats",ACCESS_ALL,"admin_stats <ID>: Shows the stats of a certain person.");
	plugin_registercmd("say","admin_stats",ACCESS_ALL,"");
 
	if(!get_vaultdata("BK_PS_STATSME",sData,MAX_DATA_LENGTH)){
		set_vaultdata("BK_PS_URL","http://www.wing-clan.de/psstats/index.php");
		set_vaultdata("BK_PS_STATSME","stats");
		strcpy(sData,"stats",MAX_DATA_LENGTH);
		set_vaultdata("BK_PS_STATSRANK","rank");
		set_vaultdata("BK_PS_PREFIX","/");
	}
 
	load_data();
 
	return PLUGIN_CONTINUE;
}
 
extract_string(sData[],sArray[][]){
	new iKeywords;
	new i;
 
	strtrim(sData," ");
	iKeywords=strcount(sData,' ');
 
	if(iKeywords!=0){
		for(i=0;i<iKeywords;i++){
			strbreak(sData,sArray[i],sData,MAX_DATA_LENGTH,MAX_COMMAND_LENGTH,MAX_DATA_LENGTH);
		}
	}
	strcpy(sArray[iKeywords],sData,MAX_COMMAND_LENGTH);
	iKeywords++;
 
	return iKeywords;
}
 
load_data(){
	new sData[MAX_DATA_LENGTH];
 
	get_vaultdata("BK_PS_STATSME",sData,MAX_DATA_LENGTH);
	giKeywordsMe=extract_string(sData,gsKeywordsMe);
	get_vaultdata("BK_PS_STATSRANK",sData,MAX_DATA_LENGTH);
	giKeywordsRank=extract_string(sData,gsKeywordsRank);
	get_vaultdata("BK_PS_PREFIX",sData,MAX_DATA_LENGTH);
	giPrefix=extract_string(sData,gsPrefix);
	get_vaultdata("BK_PS_URL",gsURL,MAX_DATA_LENGTH);
 
	return PLUGIN_CONTINUE;
}