/*
 *  Plugin of miranda IM(ICQ) for Communicating with users of the XFire Network. 
 *
 *  Copyright (C) 2010 by
 *          dufte <dufte@justmail.de>
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
 *
 *
 *  Miranda ICQ: the free icq client for MS Windows 
 *  Copyright (C) 2000-2008  Richard Hughes, Roland Rabien & Tristan Van de Vreede
 *
 */

/*
	Beinhaltet alle Funktionen und Informationen des Spiels
*/

#ifndef _XFIRE_GAME
#define _XFIRE_GAME

#include "Xfire_base.h"
#include <vector>

using namespace std;

//externe funktion die das spielstarten steuern
extern INT_PTR StartGame(WPARAM wParam,LPARAM lParam,LPARAM fParam);

class Xfire_game : public Xfire_base {
public:
		//id des spiels
		unsigned int id;
		//handle des menuitems
		HGENMENU menuhandle;
		//spiel soll bei der detection �bersprungen werden
		BOOL skip;
		//voicehat?
		BOOL voicechat;
		//es soll kein icq und co status gesetzt werden
		BOOL noicqstatus;
		//handelt es sich um ein "custom" spiel
		BOOL custom;
		//soll ein spez. status gesetzt werden
		BOOL setstatusmsg;
		//iconhandle von miranda
		HANDLE iconhandl;
		//hicon vom icon des spiels
		HICON hicon;
		//dont show in startmen�
		BOOL notinstartmenu;

		//pfad des spiels wenn es laufen sollte
		char* path;
		//startparameter des spiels
		char* launchparams;
		//netzwerkparameter
		char* networkparams;
		//username parameter
		char* userparams;
		//passwort paramter
		char* pwparams;
		//mustcontain parameter
		char* mustcontain;
		//notcontain parameter
		char* notcontain;
		//spielname
		char* name;
		//extraparameter
		char* extraparams;
		//custom gamename
		char* customgamename;
		//custom statusmsg for xfire
		char* statusmsg;

		//mehrere pfade
		vector<char*> mpath;

		//zu sende gameid
		signed short send_gameid;

		//konstruktor
		Xfire_game() {
			//vars leer setzen
			path=NULL;
			launchparams=NULL;
			networkparams=NULL;
			userparams=NULL;
			pwparams=NULL;
			mustcontain=NULL;
			notcontain=NULL;
			name=NULL;
			menuhandle=NULL;
			iconhandl=NULL;
			hicon=NULL;
			extraparams=NULL;
			customgamename=NULL;
			statusmsg=NULL;
			id=skip=noicqstatus=custom=setstatusmsg=send_gameid=notinstartmenu=voicechat=0;
		}
		//dekonstruktor
		~Xfire_game() {
			//entferne dyn arrays
			if(path)
			{
				delete[] path;
				path=NULL;
			}
			if(launchparams)
			{
				delete[] launchparams;
				launchparams=NULL;
			}
			if(networkparams)
			{
				delete[] networkparams;
				networkparams=NULL;
			}
			if(userparams)
			{
				delete[] userparams;
				userparams=NULL;
			}
			if(pwparams)
			{
				delete[] pwparams;
				pwparams=NULL;
			}
			if(mustcontain)
			{
				delete[] mustcontain;
				mustcontain=NULL;
			}
			if(notcontain)
			{
				delete[] notcontain;
				notcontain=NULL;
			}
			if(name)
			{
				delete[] name;
				name=NULL;
			}
			if(extraparams)
			{
				delete[] extraparams;
				extraparams=NULL;
			}
			if(customgamename)
			{
				delete[] customgamename;
				customgamename=NULL;
			}
			if(statusmsg)
			{
				delete[] statusmsg;
				statusmsg=NULL;
			}

			for(unsigned int i = 0 ; i < mpath.size() ; i ++) {
				if(mpath.at(i)!=NULL)
					delete mpath.at(i);
			}
			mpath.clear();

			remoteMenuitem();
		}

		//funktionen
		void readFromDB(unsigned dbid);
		void writeToDB(unsigned dbid);
		void createMenuitem(unsigned int pos,int dbid=-1);
		void refreshMenuitem();
		void remoteMenuitem();
		void setNameandIcon();
		void setIcon(HICON hicon,HANDLE handle);
		BOOL checkpath(PROCESSENTRY32* processInfo);
		BOOL start_game(char*ip=NULL,unsigned int port=0,char*pw=NULL);
		BOOL haveExtraGameArgs();
};

#endif