/* ScummVM - Scumm Interpreter
 * Copyright (C) 2004 The ScummVM project
 *
 * The ReInherit Engine is (C)2000-2003 by Daniel Balsom.
 *
 * 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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 *
 * $Header$
 *
 */

// Game interface module private header file

#ifndef SAGA_INTERFACE_H__
#define SAGA_INTERFACE_H__

#include "saga/sprite.h"
#include "saga/script.h"

namespace Saga {

enum INTERFACE_UPDATE_FLAGS {
	UPDATE_MOUSEMOVE = 1,
	UPDATE_MOUSECLICK
};

#define R_VERB_STRLIMIT 32

#define R_STATUS_TEXT_LEN 128

#define COMMAND_DEFAULT_BUTTON 1

// Inherit the Earth interface values
#define ITE_STATUS_Y      137
#define ITE_STATUS_W      320
#define ITE_STATUS_H      12
#define ITE_STATUS_TEXT_Y 2
#define ITE_STATUS_TXTCOL 186
#define ITE_STATUS_BGCOL  15

#define ITE_CMD_TEXT_COL       147
#define ITE_CMD_TEXT_SHADOWCOL 15
#define ITE_CMD_TEXT_HILITECOL 96

#define ITE_LPORTRAIT_X 5
#define ITE_LPORTRAIT_Y 4
#define ITE_RPORTRAIT_X 274
#define ITE_RPORTRAIT_Y 4

// IHNMAIMS interface values
#define IHNM_STATUS_Y      304
#define IHNM_STATUS_W      640
#define IHNM_STATUS_H      24
#define IHNM_STATUS_TEXT_Y 8
#define IHNM_STATUS_TXTCOL 186
#define IHNM_STATUS_BGCOL  0

#define IHNM_CMD_TEXT_COL       147
#define IHNM_CMD_TEXT_SHADOWCOL 15
#define IHNM_CMD_TEXT_HILITECOL 96

#define IHNM_LPORTRAIT_X 5
#define IHNM_LPORTRAIT_Y 4
#define IHNM_RPORTRAIT_X -1
#define IHNM_RPORTRAIT_Y -1

enum R_PANEL_MODES {
	PANEL_COMMAND,
	PANEL_DIALOGUE
};

enum R_BUTTON_FLAGS {
	BUTTON_NONE = 0x0,
	BUTTON_LABEL = 0x01,
	BUTTON_BITMAP = 0x02,
	BUTTON_SET = 0x04

};

#define BUTTON_VERB ( BUTTON_LABEL | BUTTON_BITMAP | BUTTON_SET )

struct R_INTERFACE_BUTTON {
	int x1;
	int y1;
	int x2;
	int y2;
	const char *label;
	int inactive_sprite;
	int active_sprite;
	int flags;
	int data;
};

struct R_INTERFACE_PANEL {
	byte *res;
	size_t res_len;
	int x;
	int y;
	byte *img;
	size_t img_len;
	int img_w;
	int img_h;
	int set_button;
	int nbuttons;
	R_INTERFACE_BUTTON *buttons;
	R_SPRITELIST *sprites;
};

struct R_INTERFACE_DESC {
	int status_y;
	int status_w;
	int status_h;
	int status_txt_y;
	int status_txt_col;
	int status_bgcol;
	int cmd_txt_col;
	int cmd_txt_shadowcol;
	int cmd_txt_hilitecol;
	int cmd_defaultbutton;
	int lportrait_x;
	int lportrait_y;
	int rportrait_x;
	int rportrait_y;
};

struct R_INTERFACE_MODULE {
};

enum INTERFACE_VERBS {
	I_VERB_WALKTO,
	I_VERB_LOOKAT,
	I_VERB_PICKUP,
	I_VERB_TALKTO,
	I_VERB_OPEN,
	I_VERB_CLOSE,
	I_VERB_USE,
	I_VERB_GIVE
};

struct R_VERB_DATA {
	int i_verb;
	const char *verb_cvar;
	char verb_str[R_VERB_STRLIMIT];
	int s_verb;
};

class Interface {
 public:
	Interface(SagaEngine *vm);
	~Interface(void);

	int registerLang();
	int activate();
	int deactivate();
	int setMode(R_PANEL_MODES mode);
	int setStatusText(const char *new_txt);
	int loadScenePortraits(int res);
	int setLeftPortrait(int portrait);
	int setRightPortrait(int portrait);
	int draw();
	int update(const Point& imousePt, int update_flag);


 private:
	int hitTest(const Point& imousePt, int *ibutton);
	int drawStatusBar(R_SURFACE *ds);
	int handleCommandUpdate(R_SURFACE *ds, const Point& imousePt);
	int handleCommandClick(R_SURFACE *ds, const Point& imousePt);
	int handlePlayfieldUpdate(R_SURFACE *ds, const Point& imousePt);
	int handlePlayfieldClick(R_SURFACE *ds, const Point& imousePt);

 private:
	SagaEngine *_vm;

	bool _initialized;
	int _active;
	R_RSCFILE_CONTEXT *_interfaceContext;
	R_INTERFACE_DESC _iDesc;
	R_PANEL_MODES _panelMode;
	R_INTERFACE_PANEL _cPanel;
	R_INTERFACE_PANEL _dPanel;
	char _statusText[R_STATUS_TEXT_LEN];
	int _leftPortrait;
	int _rightPortrait;
	R_SPRITELIST *_defPortraits;
	R_SPRITELIST *_scenePortraits;
	int _activeVerb;
	R_SCRIPT_THREAD *_iThread;
};

} // End of namespace Saga

#endif				/* R_INTERFACE_H__ */
/* end "r_interface.h" */