#ifndef B3G_WINDOW_INTERFACE_H
#define B3G_WINDOW_INTERFACE_H


typedef void (*b3WheelCallback)(float deltax, float deltay);
typedef void (*b3ResizeCallback)( float width, float height);
typedef void (*b3MouseMoveCallback)( float x, float y);
typedef void (*b3MouseButtonCallback)(int button, int state, float x, float y);
typedef void (*b3KeyboardCallback)(int keycode, int state);
typedef void (*b3RenderCallback) ();

enum {
	B3G_ESCAPE = 27,
	B3G_F1 = 0xff00,
	B3G_F2,
	B3G_F3,
	B3G_F4,
	B3G_F5,
	B3G_F6,
	B3G_F7,
	B3G_F8,
	B3G_F9,
	B3G_F10,
	B3G_F11,
	B3G_F12,
	B3G_F13,
	B3G_F14,
	B3G_F15,
	B3G_LEFT_ARROW,
	B3G_RIGHT_ARROW,
	B3G_UP_ARROW,
	B3G_DOWN_ARROW,
	B3G_PAGE_UP,
	B3G_PAGE_DOWN,
	B3G_END,
	B3G_HOME,
	B3G_INSERT,
	B3G_DELETE,
	B3G_BACKSPACE,
	B3G_SHIFT,
	B3G_CONTROL,
	B3G_ALT,
	B3G_RETURN
};

struct b3gWindowConstructionInfo
{
		int m_width;
		int m_height;
		bool m_fullscreen;
		int m_colorBitsPerPixel;
		void* m_windowHandle;
		const char* m_title;
		int m_openglVersion;
    

		b3gWindowConstructionInfo(int width=1024, int height=768)
		:m_width(width),
			m_height(height),
			m_fullscreen(false),
			m_colorBitsPerPixel(32),
			m_windowHandle(0),
			m_title("title"),
			m_openglVersion(3)
			{
			}
};


class CommonWindowInterface
{
	public:
		
		virtual ~CommonWindowInterface()
		{
		}

		virtual void	createDefaultWindow(int width, int height, const char* title)
		{
			b3gWindowConstructionInfo ci(width,height);
			ci.m_title = title;
			createWindow(ci);
		}

		virtual	void	createWindow(const b3gWindowConstructionInfo& ci)=0;
		
		virtual void	closeWindow()=0;

		virtual void	runMainLoop()=0;
		virtual	float	getTimeInSeconds()=0;

		virtual bool	requestedExit() const = 0;
		virtual	void	setRequestExit() = 0;

		virtual	void	startRendering()=0;

		virtual	void	endRendering()=0;

		virtual bool	isModifierKeyPressed(int key) = 0;
		
		virtual void setMouseMoveCallback(b3MouseMoveCallback	mouseCallback)=0;
		virtual b3MouseMoveCallback getMouseMoveCallback()=0;
		
		virtual void setMouseButtonCallback(b3MouseButtonCallback	mouseCallback)=0;
		virtual b3MouseButtonCallback getMouseButtonCallback()=0;

		virtual void setResizeCallback(b3ResizeCallback	resizeCallback)=0;
		virtual b3ResizeCallback getResizeCallback()=0;
		
		virtual void setWheelCallback(b3WheelCallback wheelCallback)=0;
		virtual b3WheelCallback getWheelCallback()=0;
		
		virtual void setKeyboardCallback( b3KeyboardCallback	keyboardCallback)=0;
		virtual b3KeyboardCallback	getKeyboardCallback()=0;

		virtual void setRenderCallback( b3RenderCallback renderCallback) = 0;
	
		virtual void setWindowTitle(const char* title)=0;

		virtual	float	getRetinaScale() const =0;
		virtual	void	setAllowRetina(bool allow) =0;

        virtual int   getWidth() const = 0;
        virtual int   getHeight() const = 0;

        virtual int fileOpenDialog(char* fileName, int maxFileNameLength) = 0;
    
};

#endif //B3G_WINDOW_INTERFACE_H