#include "app.h"
#include "background.h"

static UINT32 				BackgroundKeypress( EVENT_STACK_T *ev_st,  APPLICATION_T *app );
static UINT32 				DrawDesktopStatus( EVENT_STACK_T *ev_st,  APPLICATION_T *app );

static UINT8  				pkey;
extern DRAWING_BUFFER_T 	bufd;

EVENT_HANDLER_ENTRY_T background_state_handlers[] =
{
	{ EV_KEY_RELEASE,           BackgroundKeypress },
	{ EV_IDLE_FOCUS,             DrawDesktopStatus },
    { STATE_HANDLERS_END,         			  NULL },
};


void APPHandleEvent( EVENT_STACK_T *ev_st, APPLICATION_T *app, APP_ID_T app_id, REG_ID_T reg_id )
{
	socket_HandleEvent( ev_st, app );
	UIX_HandleEvent( ev_st, app );

	APP_HandleEvent(ev_st, app, app_id, reg_id);
}

UINT32 appHide( APPLICATION_T *app )
{
    APP_ELF_T           	*papp = (APP_ELF_T*) app;

    dbg("appHide");

	return AppChangeState(app, APP_STATE_BACKGROUND, FALSE);
	
}
UINT32 appShow( APPLICATION_T *app )
{
    APP_ELF_T           	*papp = (APP_ELF_T*) app;

    dbg("appShow");
	

	return AppChangeState(app, papp->prev_state, TRUE);
}

UINT32 BackgroundStateEnter( EVENT_STACK_T * ev_st, APPLICATION_T * app, ENTER_STATE_TYPE_T type )
{
	UINT32			status;
	dbgf("BackgroundStateEnter: Enter, type = %d", type);
	status = RESULT_OK;
	if ( type == ENTER_STATE_ENTER ) {
		status = APP_ChangeRoutingStack( app, ev_st,
			APPHandleEvent,
			AFW_PREPROCESSING,
			AFW_POSITION_TOP,
			1,
			AFW_APP_CENTRICITY_NONE );
	}
	
	return status;
}

UINT32 BackgroundStateExit( EVENT_STACK_T * ev_st, APPLICATION_T * app, EXIT_STATE_TYPE_T type )
{
	UINT32			status;
	dbgf("BackgroundStateExit: Enter, type = %d", type);
	status = RESULT_OK;
	if ( type == EXIT_STATE_EXIT ) {
		status = APP_ChangeRoutingStack( app, ev_st,
			APPHandleEvent,
			AFW_FOCUS,
			AFW_POSITION_TOP,
			1,
			AFW_APP_CENTRICITY_SECONDARY );
	}
	return status;
}

/* Обработчик события, EV_KEY_PRESS в данном случае */
UINT32 BackgroundKeypress( EVENT_STACK_T *ev_st,  APPLICATION_T *app )
{
	
    if (GET_KEY(ev_st) == BACKGROUND_RESTORE_KEY2) { // # 
        if(pkey == BACKGROUND_RESTORE_KEY1) {
            pkey = 0;
            APP_ConsumeEv(ev_st, app);
            appShow( app );
        }
		
    } else if (GET_KEY(ev_st) == BACKGROUND_RESTORE_KEY1) {  // *
        pkey = GET_KEY(ev_st);
    } else {
        pkey = 0;
    } 
	

    return RESULT_OK;
}

UINT32 DrawDesktopStatus( EVENT_STACK_T *ev_st,  APPLICATION_T *app )
{
	extern AHIBITMAP_T 		*image_icons;

	if( !WorkingTable() ) return RESULT_OK;
	

	AHG_Flush();
	
    return RESULT_OK;
}
