#ifndef DATA_DEF
 #define DATA_DEF


//------------------------- DATA Module -------------------------//
//						  v 08 . 03 .  2007						 //
//																 //
//								MT								 //
//---------------------------------------------------------------//


//---------------------- Incudes 
#include "stdlib.h"
#include <string.h>
#include "stdio.h"

#include "../../ui/onerror.hpp"
//====================== Includes


//---------------------- Defines
#define TAG_SIZE 64
#define STRING_SIZE 256
#define MAX_GAMER_COUNT 100

#define STR_TAG  "<tag>"
#define STR_END  "<end>"
#define STR_CHILDEND  "childend"
//====================== Defines



			// CGamer --------------------------------------------------------------
			class CGamer { 
			public :
				// header of CGamer
				char	_tag_header [TAG_SIZE];

					// 1 Money 
					char	_tag_money [TAG_SIZE];
					int money;
					// 2 Production 
					char	_tag_prod [TAG_SIZE];
					int prod;
					// 3 Raw 
					char	_tag_raw [TAG_SIZE];
					int raw;
					// 4 Fabrics number
					char	_tag_fabrics [TAG_SIZE];
					int fabrics;
					// 5 Auto plants
					char	_tag_auto_plants [TAG_SIZE];
					int auto_plants;
					
					// 6 Gamer name
					char	_tag_gamer_name [TAG_SIZE];
					char	gamer_name [STRING_SIZE];

				// end of CGamer
				char	_tag_end [TAG_SIZE];

				CGamer() 
				{
					strcpy(_tag_header,  "<tag><type=child><name=gamer>\0");
					
						strcpy(_tag_money, "<tag><type=int><name=money>\0");
						strcpy(_tag_prod,  "<tag><type=int><name=prod>\0");
						strcpy(_tag_raw,   "<tag><type=int><name=raw>\0");
						strcpy(_tag_fabrics, "<tag><type=int><name=fabrics>\0");
						strcpy(_tag_auto_plants, "<tag><type=int><name=auto_plants>\0");
						strcpy(_tag_gamer_name,  "<tag><type=string><name=gamer_name>\0");

					strcpy(_tag_end,  "<tag><type=childend><name=gamer>\0");
				}
			};
			// CGamer ==============================================================



			// CMarket -------------------------------------------------------------
			class CMarket {
			public:
				// header of CMarket
				char	_tag_header [TAG_SIZE];

					// 1 Min raw price
					char	_tag_min_raw_price [TAG_SIZE];
					int min_raw_price;
					// 2 Max prod price
					char	_tag_max_prod_price [TAG_SIZE];
					int max_prod_price;
					// 3 Market raw access
					char	_tag_raw [TAG_SIZE];
					int raw;
					// 4 Market production need
					char	_tag_prod [TAG_SIZE];
					int prod;

				// end of CMarket
				char	_tag_end [TAG_SIZE];

				CMarket() 
				{
					strcpy(_tag_header,  "<tag><type=child><name=market>\0");
						
						strcpy(_tag_min_raw_price,  "<tag><type=int><name=min_raw_price>\0");
						strcpy(_tag_max_prod_price, "<tag><type=int><name=max_prod_price>\0");
						strcpy(_tag_raw,			"<tag><type=int><name=raw>\0");
						strcpy(_tag_prod,			"<tag><type=int><name=prod>\0");

					strcpy(_tag_end,  "<tag><type=childend><name=market>\0");
				}
			};
			// CMarket =============================================================



// ---------------- CDATA -------------- //
class CData{
public :	

// --- DATA		
		// 1 Pointer to begin
		char	_tag_begin [TAG_SIZE];
		CData*	pointer_to_data;

		// 2 Turn number
		char	_tag_turn_number [TAG_SIZE];
		int		turn_number;

		// 3 Game number
		char	_tag_game_number [TAG_SIZE];
		int		game_number;
			
		// 4 Win
		char	_tag_win [TAG_SIZE];
		int		win;
// ---------------------------------------------------------------------------------
		// --- YOU :: CGamer
		CGamer you;

		// 5 Players count
		char	_tag_players_count [TAG_SIZE];
		int		players_count;

		// --- Players :: CGamer
		CGamer players[MAX_GAMER_COUNT];

// ---------------------------------------------------------------------------------
		// --- MARKET :: CMarket
		CMarket market;

// =================================================================================
		char	_tag_data_end [TAG_SIZE];

public : 
	CData ();

	int GetNumberByGamerName(char *s);
	
	int AddGamer(char *s);
	int DeleteGamer(int i);

private : 
	void* GetVarAddr(char *name, void *def, char* end);
	int GetInt(char *name, void *begin, char* end);
	int GetInData(char *name);
	void ShowError(char *name);
	char *PName(char *s) { if (s == NULL) return NULL; return &s[1]; };

public : 
	
	int Get(char *name1, char *name2 = NULL, int n = -1, char *name3 = NULL);
	

};

#endif
