/*==LICENSE==*

CyanWorlds.com Engine - MMOG client, server and tools
Copyright (C) 2011  Cyan Worlds, Inc.

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 3 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, see <http://www.gnu.org/licenses/>.

You can contact Cyan Worlds, Inc. by email legal@cyan.com
 or by snail mail at:
      Cyan Worlds, Inc.
      14617 N Newport Hwy
      Mead, WA   99021

*==LICENSE==*/
//////////////////////////////////////////////////////////////////////////////
//																			//
//	plInputIfaceMgrMsg Header 												//
//																			//
//////////////////////////////////////////////////////////////////////////////

#ifndef _plInputIfaceMgrMsg_h
#define _plInputIfaceMgrMsg_h

#include "hsTypes.h"
#include "hsStream.h"
#include "hsResMgr.h"
#include "pnMessage/plMessage.h"
#include "pnUtils/pnUtils.h"

class plInputInterface;
class plInputIfaceMgrMsg : public plMessage
{
	protected:

		UInt8	fCommand;
		plInputInterface	*fInterface;
		UInt32	fPageID;
		const char*	ageName;
		const char*	ageFileName;
		const char* spawnPoint;
		Uuid ageInstanceGuid;
		plKey fAvKey;
	public:

		enum 
		{
			kAddInterface,
			kRemoveInterface,
			kEnableClickables,			/// YEEEEEECH!!!!
			kDisableClickables,
			kSetOfferBookMode,
			kClearOfferBookMode,
			kNotifyOfferAccepted,
			kNotifyOfferRejected,
			kNotifyOfferCompleted,
			kDisableAvatarClickable,
			kEnableAvatarClickable,
			kGUIDisableAvatarClickable,
			kGUIEnableAvatarClickable,
			kSetShareSpawnPoint,
			kSetShareAgeInstanceGuid,
		};

		plInputIfaceMgrMsg() : plMessage( nil, nil, nil ) { SetBCastFlag( kBCastByExactType ); fInterface = nil; ageName = ageFileName = spawnPoint = 0; fAvKey = nil; }
		plInputIfaceMgrMsg( plKey &receiver, UInt8 command ) : plMessage( nil, nil, nil ) { AddReceiver( receiver ); fCommand = command; fInterface = nil; fAvKey = nil; ageName = ageFileName = spawnPoint =  0;}
		plInputIfaceMgrMsg( UInt8 command ) : plMessage( nil, nil, nil ) { SetBCastFlag( kBCastByExactType ); fCommand = command; fInterface = nil; fAvKey = nil; ageName = ageFileName = spawnPoint =  0;}
		plInputIfaceMgrMsg( UInt8 command, UInt32 pageID ) : plMessage( nil, nil, nil ) { SetBCastFlag( kBCastByExactType ); fCommand = command; fPageID = pageID; fInterface = nil; fAvKey = nil; ageName = ageFileName = spawnPoint =  0;}
		~plInputIfaceMgrMsg();

		CLASSNAME_REGISTER( plInputIfaceMgrMsg );
		GETINTERFACE_ANY( plInputIfaceMgrMsg, plMessage );

		virtual void Read(hsStream* s, hsResMgr* mgr) 
		{ 
			plMessage::IMsgRead( s, mgr ); 
			s->ReadSwap( &fCommand );
			s->ReadSwap( &fPageID );
			ageName = s->ReadSafeString();
			ageFileName = s->ReadSafeString();
			spawnPoint = s->ReadSafeString();
			fAvKey = mgr->ReadKey(s);
		}
		
		virtual void Write(hsStream* s, hsResMgr* mgr) 
		{ 
			plMessage::IMsgWrite( s, mgr ); 
			s->WriteSwap( fCommand );
			s->WriteSwap( fPageID );
			s->WriteSafeString(ageName);
			s->WriteSafeString(ageFileName);
			s->WriteSafeString(spawnPoint);
			mgr->WriteKey(s,fAvKey);
		}

		void		SetAgeName(const char* s) { ageName = s;	}
		const char*	GetAgeName() { return ageName; }
		void		SetAgeFileName(const char* s) { ageFileName = s;	}
		const char*	GetAgeFileName() { return ageFileName; }
		void		SetSpawnPoint(const char* s) { spawnPoint = s; }
		const char* GetSpawnPoint() { return spawnPoint; }
		void		SetAgeInstanceGuid(const Uuid& guid) { ageInstanceGuid = guid; }
		const Uuid&	GetAgeInstanceGuid() { return ageInstanceGuid; }
		UInt8		GetCommand( void ) { return fCommand; }
		UInt32		GetPageID( void ) { return fPageID; }		
		void				SetIFace( plInputInterface *iface );
		plInputInterface	*GetIFace( void ) const { return fInterface; }
		plKey&		GetAvKey( void ) { return fAvKey; }
		const plKey&	GetAvKey( void ) const { return fAvKey; }
		void		SetAvKey( plKey& k ) { fAvKey = k; }
};

#endif // _plInputIfaceMgrMsg_h