// ======================================================================
//
// ConfigCommodityServer.h
// Copyright 2004, Sony Online Entertainment Inc., all rights reserved.
// Author: Doug Mellencamp
//
// ======================================================================

#ifndef	_ConfigCommodityServer_H
#define	_ConfigCommodityServer_H

//-----------------------------------------------------------------------

class ConfigCommodityServer
{
  public:
    struct Data
    {
	int           cmServerServiceBindPort;
	const char *  cmServerServiceBindInterface;
	int           databaseServerPort;
	const char *  databaseServerAddress;
	const char *  dsn;
	const char *  databaseUID;
	const char *  databasePWD;
	const char *  databaseSchema;
	int           secondsBetweenDBReconnect;
	const char *  databaseProtocol;
	bool          enableQueryProfile;
	bool          verboseQueryMode;
	bool          developmentMode;
	int           databaseThreads;                    // db task q threads
	int           databaseCharacterNameSizeLimit;     // max character name db column size
	int           databaseItemNameSizeLimit;          // max item name db column size
	int           databaseUserDescriptionSizeLimit;   // max user desc db column size
	int           databaseOOBDataSizeLimit;           // max out of band data db column size
	bool          snapshotDBWrite;                    // save db writes delayed or immediate
	bool          showAllDebugInfo;                   // show detailed debugging logging info
	int           centralServerPort;
	const char *  centralServerAddress;
	int           sleepTimePerFrameMs;
	int           minutesActiveToUnaccessed;
	int           minutesEmptyToEndangered;
	int           minutesUnaccessedToEndangered;
	int           minutesEndangeredToRemoved;
	int           minutesVendorAuctionTimer;
	int           minutesVendorItemTimer;
	int           maxAuctionsPerPage;
    };

	static uint16        getCMServerServiceBindPort             ();
	static const char *  getCMServerServiceBindInterface        ();
	static uint16        getDatabaseServerPort                  ();
	static const char *  getDatabaseServerAddress               ();
	static const char *  getDSN                                 ();
	static const char *  getDatabaseUID                         ();
	static const char *  getDatabasePWD                         ();
	static const char *  getDatabaseSchema                      ();
	static uint16        getSecondsBetweenDBReconnect           ();
	static const char *  getDatabaseProtocol                    ();
	static bool          getEnableQueryProfile                  ();
	static bool          getVerboseQueryMode                    ();
	static bool          getDevelopmentMode                     ();
	static int           getDatabaseThreads                     ();
	static unsigned int  getDatabaseCharacterNameSizeLimit      ();
	static unsigned int  getDatabaseItemNameSizeLimit           ();
	static unsigned int  getDatabaseUserDescriptionSizeLimit    ();
	static unsigned int  getDatabaseOOBDataSizeLimit            ();
	static bool          getSnapshotDBWrite                     ();
	static bool          getShowAllDebugInfo                    ();
	static uint16        getCentralServerPort                   ();
	static const char *  getCentralServerAddress                ();
	static int           getSleepTimePerFrameMs                 ();
	static int           getMinutesActiveToUnaccessed           ();
	static int           getMinutesEmptyToEndangered            ();
	static int           getMinutesUnaccessedToEndangered       ();
	static int           getMinutesEndangeredToRemoved          ();
	static int           getMinutesVendorAuctionTimer           ();
	static int           getMinutesVendorItemTimer              ();
	static int           getMaxAuctionsPerPage                  ();

	static void          install                                ();
	static void          remove                                 ();

  private:
    static Data *	data;
};

//-----------------------------------------------------------------------

inline unsigned short ConfigCommodityServer::getCMServerServiceBindPort()
{
	return data->cmServerServiceBindPort;
}

//-----------------------------------------------------------------------

inline unsigned short ConfigCommodityServer::getDatabaseServerPort()
{
	return data->databaseServerPort;
}

//-----------------------------------------------------------------------

inline const char * ConfigCommodityServer::getCMServerServiceBindInterface()
{
	return data->cmServerServiceBindInterface;
}

//-----------------------------------------------------------------------

inline const char * ConfigCommodityServer::getDatabaseServerAddress()
{
	return data->databaseServerAddress;
}

//-----------------------------------------------------------------------

inline const char * ConfigCommodityServer::getDSN()
{
	return data->dsn;
}

//-----------------------------------------------------------------------

inline const char * ConfigCommodityServer::getDatabaseUID()
{
	return data->databaseUID;
}

//-----------------------------------------------------------------------

inline const char * ConfigCommodityServer::getDatabasePWD()
{
	return data->databasePWD;
}

//-----------------------------------------------------------------------

inline const char * ConfigCommodityServer::getDatabaseSchema()
{
	return data->databaseSchema;
}

//-----------------------------------------------------------------------

inline unsigned short ConfigCommodityServer::getSecondsBetweenDBReconnect()
{
	return data->secondsBetweenDBReconnect;
}

//-----------------------------------------------------------------------

inline const char * ConfigCommodityServer::getDatabaseProtocol()
{
	return (data->databaseProtocol);
}

//-----------------------------------------------------------------------

inline bool ConfigCommodityServer::getEnableQueryProfile()
{
	return (data->enableQueryProfile);
}

// ----------------------------------------------------------------------

inline bool ConfigCommodityServer::getVerboseQueryMode()
{
	return (data->verboseQueryMode);
}

// ----------------------------------------------------------------------

inline bool ConfigCommodityServer::getDevelopmentMode()
{
	return (data->developmentMode);
}

// ----------------------------------------------------------------------

inline int ConfigCommodityServer::getDatabaseThreads()
{
	return (data->databaseThreads);
}

// ----------------------------------------------------------------------

inline unsigned int ConfigCommodityServer::getDatabaseCharacterNameSizeLimit()
{
	return (data->databaseCharacterNameSizeLimit);
}

// ----------------------------------------------------------------------

inline unsigned int ConfigCommodityServer::getDatabaseItemNameSizeLimit()
{
	return (data->databaseItemNameSizeLimit);
}

// ----------------------------------------------------------------------

inline unsigned int ConfigCommodityServer::getDatabaseUserDescriptionSizeLimit()
{
	return (data->databaseUserDescriptionSizeLimit);
}

// ----------------------------------------------------------------------

inline unsigned int ConfigCommodityServer::getDatabaseOOBDataSizeLimit()
{
	return (data->databaseOOBDataSizeLimit);
}

// ----------------------------------------------------------------------

inline bool ConfigCommodityServer::getSnapshotDBWrite()
{
	return (data->snapshotDBWrite);
}

// ----------------------------------------------------------------------

inline bool ConfigCommodityServer::getShowAllDebugInfo()
{
	return (data->showAllDebugInfo);
}

//-----------------------------------------------------------------------

inline unsigned short ConfigCommodityServer::getCentralServerPort()
{
	return data->centralServerPort;
}

//-----------------------------------------------------------------------

inline const char * ConfigCommodityServer::getCentralServerAddress()
{
	return data->centralServerAddress;
}

//-----------------------------------------------------------------------

inline int ConfigCommodityServer::getSleepTimePerFrameMs()
{
	return data->sleepTimePerFrameMs;
}

//-----------------------------------------------------------------------

inline int ConfigCommodityServer::getMinutesActiveToUnaccessed()
{
	return data->minutesActiveToUnaccessed;
}

//-----------------------------------------------------------------------

inline int ConfigCommodityServer::getMinutesEmptyToEndangered()
{
	return data->minutesEmptyToEndangered;
}

//-----------------------------------------------------------------------

inline int ConfigCommodityServer::getMinutesUnaccessedToEndangered()
{
	return data->minutesUnaccessedToEndangered;
}

//-----------------------------------------------------------------------

inline int ConfigCommodityServer::getMinutesEndangeredToRemoved()
{
	return data->minutesEndangeredToRemoved;
}

//-----------------------------------------------------------------------

inline int ConfigCommodityServer::getMinutesVendorAuctionTimer()
{
	return data->minutesVendorAuctionTimer;
}

//-----------------------------------------------------------------------

inline int ConfigCommodityServer::getMinutesVendorItemTimer()
{
	return data->minutesVendorItemTimer;
}

//-----------------------------------------------------------------------

inline int ConfigCommodityServer::getMaxAuctionsPerPage()
{
	return data->maxAuctionsPerPage;
}

#endif	// _ConfigCommodityServer_H
