#ifndef START_MENU_H
#define START_MENU_H
#include <apps.h> 	// Первым! Приложение!
#include <loader.h>
#include <solib.h>
#include <bmp.h>
#include <paint.h>
#include <u.h>
#include <mem.h>
#include <utilities.h>
#include <func.h>
#include <socket.h>
#include <charset_conv.h>
#include <list_ctrl.h>


#define  ELF_NAME					"Labirint"
#define  ELF_VER					"v0.1"
#define  DEBUG_APP_NAME				ELF_NAME
#define  LOG_FILE  					L"file://b/"ELF_NAME".log"

#define REPAINT_TIMER_ID 0x9FAA0

#include <tadbg.h> 	// Отладчик

#define CAMERA_W	(11)	// Ширина камеры
#define CAMERA_H	(10)

extern const unsigned char bmp_level1_data[2000];
extern AHIBITMAP_T bmp_level1;


extern const AHIBITMAP_T bmp_res;

// ----------------------------------------------------------------------------------------- //

/* Эта структура идентифицирует приложение. Передаётся в любой обработчик событий */
typedef struct
{ 
    APPLICATION_T           apt; /* Должно обязательно присутствовать, причём первым */
	UINT8       			entries_num;		// Кол-во пунктов.

} APP_ELF_T;

/* Состояния приложения */
typedef enum
{
    APP_STATE_ANY, /* ANY-state всегда первым */
	APP_STATE_MAIN, 		// Контакт лист.
    APP_STATE_MAX /* Для удобства */
} APP_STATES_T;


typedef enum
{
	MENU_MAIN,
	MENU_WIN,
	GAME,
	ABOUT, 				// О программе...
	EXIT 				// Выход
}STATES_T;

typedef struct
{
	UINT8		volume;			// Громкость
	
} SETTING_T; // настройки

typedef struct
{
	UINT8		select;
	UINT8		menu;
	UINT8		chat;
	UINT8		settings;	// положение курсора в настройках
	UINT8		x;			// 
	UINT8		y;			// Положение курсора смайлика 
} ITEM;


ldrElf * _start( WCHAR * uri, WCHAR * params );

static UINT32 startApp( EVENT_STACK_T *ev_st,  REG_ID_T reg_id,  UINT32 param2 ); 
static UINT32 destroyApp( EVENT_STACK_T *ev_st,  APPLICATION_T *app ); // Выход

static UINT32 MainStateEnter( EVENT_STACK_T *ev_st,  APPLICATION_T *app,  ENTER_STATE_TYPE_T type );

static UINT32 StateExit( EVENT_STACK_T *ev_st,  APPLICATION_T *app,  EXIT_STATE_TYPE_T type );

static UINT32 HandleKeypress( EVENT_STACK_T * ev_st,  APPLICATION_T * app ); // Обработчик клавиатуры в списке контактов.

static void DrawMain( APPLICATION_T *app );
static void DrawGame( APPLICATION_T *app );
static void PlayerMove( int x, int y );

static UINT32 HandleTimer( EVENT_STACK_T *ev_st,  APPLICATION_T *app );

static UINT32 Create( WCHAR *name );
static UINT32 HandlePlay( EVENT_STACK_T *ev_st,  APPLICATION_T *app );
static UINT32 HandlePlayComplete( EVENT_STACK_T *ev_st,  APPLICATION_T *app );
static UINT32 SetVol(BOOL vol); // синхронизация громкости

#ifdef	DEBUG
static void	ReportPhoneInfo( void );
#endif	

#endif
