/*
 *  App.h
 *  Created by Seth Robinson on 3/6/09.
 *  For license info, check the license.txt file that should have come with this.
 *
 */

#pragma once
#include "BaseApp.h"
#include "Manager/AdManager.h"

#define RT_IS_BETA 1

#ifdef RT_SCRIPT_BUILD

 //this is being build from the command line, enable special flags here
#endif

class GamepadProvider;

enum eControlStyle
{
	CONTROLS_JOYPAD,
	CONTROLS_DRAG_ANYWHERE,
	CONTROLS_FLING
};

enum eVideoFPS
{
	VIDEO_FPS_LIMIT_ON,
	VIDEO_FPS_LIMIT_OFF
};



#ifndef __APPLE__
//#define RT_EXPIRING
#endif

//#define RT_CHARTBOOST_ENABLED


class App: public BaseApp
{
public:
	
	App();
	virtual ~App();
	
	virtual bool Init();
	virtual void Kill();
	virtual bool OnPreInitVideo();
	virtual void Draw();
	virtual void OnScreenSizeChange();
	virtual void Update();
	virtual void OnMemoryWarning();
	virtual void OnEnterBackground();
	virtual void OnEnterForeground();

	string GetVersionString();
	float GetVersion();
	int GetBuild();
	void GetServerInfo(string &server, uint32 &port);
	VariantDB * GetShared() {return &m_varDB;}
	Variant * GetVar(const string &keyName );
	Variant * GetVarWithDefault(const string &varName, const Variant &var) {return m_varDB.GetVarWithDefault(varName, var);}
	int GetSpecial();
	void UpdateVideoSettings();
	bool GetUsingTouchScreen() {return m_bUsingTouchScreen;}
	bool CanDownloadDMODS() {return m_bHasDMODSupport;}
	void SetCheatsEnabled(bool bCheatsEnabled) {m_bCheatsEnabled = bCheatsEnabled;}
	bool GetCheatsEnabled() {return m_bCheatsEnabled;}
	void OnExitApp(VariantList *pVarList);
	bool GetIconsOnLeft();
	void RemoveAndAttachAllAvailableGamepads();

	AdManager * GetAdManager() {return &m_adManager;}

	void OnMessage( Message &m );
	void OnLoadSurfaces();
	void OnUnloadSurfaces();
	void AddDroidKeyboardKeys();
	void RemoveAndroidKeyboardKeys();
	void AddIcadeProvider();
	bool GetForceAspectRatio();

private:

	AdManager m_adManager;

	bool m_bDidPostInit;
	VariantDB m_varDB; //holds all data we want to save/load
	int m_special;
	bool m_bUsingTouchScreen;
	bool m_bForceAspectRatio;

	void SaveAllData();
	void OnPreEnterBackground(VariantList *pVList);
	void OniCadeDisconnected(GamepadProvider *pProvider);
	float m_version;
	string m_versionString;
	int m_build;

	float m_desktopVersion;
	string m_desktopVersionString;
	int m_desktopBuild;
	bool m_bHasDMODSupport;
	bool m_bCheatsEnabled;

};


App * GetApp();
const char * GetAppName();
const char * GetBundleName();
const char * GetBundlePrefix();