/*
Copyright (C) 1997-2001 Id Software, Inc.

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.

*/

#include "ui_local.h"

/*
=============================================================================

GAME MENU

=============================================================================
*/

#define ID_LOADGAME	101
#define ID_START	102

typedef struct m_game_s {
	menuFrameWork_t	menu;
	menuSpinControl_t	skill;
	menuAction_t load;
	menuAction_t start;
	menuStatic_t	banner;
} m_game_t;

static m_game_t		m_game;

static const char *difficulty_names[] = {
	"easy",
	"medium",
	"hard",
	"hard+",
	NULL
};

static void StartGame( void ) {
	cvar.SetInteger( "skill", m_game.skill.curvalue );
	cvar.SetInteger( "deathmatch", 0 );
	cvar.SetInteger( "coop", 0 );
	cvar.SetInteger( "gamerules", 0 );		//PGM

	cmd.ExecuteText( EXEC_APPEND, "map base1\n" );

	// disable updates and start the cinematic going
	UI_ForceMenuOff();

}

static int GameMenu_Callback( int id, int msg, int param ) {
	switch( msg ) {
	case QM_ACTIVATE:
		switch( id ) {
		case ID_LOADGAME:
			M_Menu_LoadGame_f ();
			break;
		case ID_START:
			StartGame();
			break;
		}
		return QMS_IN;
	case QM_DESTROY:
		break;
	default:
		break;
	}

	return QMS_NOTHANDLED;

}

static void GameMenu_Init( void ) {
	int y;

	memset( &m_game, 0, sizeof( m_game ) );

	m_game.menu.callback = GameMenu_Callback;

	y = 120;
	m_game.skill.generic.type	= MTYPE_SPINCONTROL;
	m_game.skill.generic.name	= "skill";
	m_game.skill.generic.x		= uis.glconfig.vidWidth / 2;
	m_game.skill.generic.y		= y;
	m_game.skill.itemnames		= difficulty_names;
	y += 8;

	m_game.load.generic.type	= MTYPE_ACTION;
	m_game.load.generic.id		= ID_LOADGAME;
	m_game.load.generic.name	= "load game";
	m_game.load.generic.x		= uis.glconfig.vidWidth / 2 + LCOLUMN_OFFSET;
	m_game.load.generic.y		= y;
	m_game.load.generic.uiFlags	= UI_RIGHT;
	y += 8;

	m_game.start.generic.type	= MTYPE_ACTION;
	m_game.start.generic.flags	= QMF_HASFOCUS;
	m_game.start.generic.id		= ID_START;
	m_game.start.generic.name	= "start game";
	m_game.start.generic.x		= uis.glconfig.vidWidth / 2 + LCOLUMN_OFFSET;
	m_game.start.generic.y		= y;
	m_game.start.generic.uiFlags	= UI_RIGHT;
	y += 8;

	UI_SetupDefaultBanner( &m_game.banner, "Single player" );

	Menu_AddItem( &m_game.menu, (void *)&m_game.skill );
	Menu_AddItem( &m_game.menu, (void *)&m_game.load );
	Menu_AddItem( &m_game.menu, (void *)&m_game.start );
	Menu_AddItem( &m_game.menu, (void *)&m_game.banner );
}



void M_Menu_Game_f( void ) {
	GameMenu_Init();
	UI_PushMenu( &m_game.menu );
}
