/* Copyright (c) 2002-2012 Croteam Ltd.
This program is free software; you can redistribute it and/or modify
it under the terms of version 2 of the GNU General Public License as published by
the Free Software Foundation


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.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */

#include "StdH.h"
#include <Engine/CurrentVersion.h>
#include "MenuPrinting.h"
#include "MenuStuff.h"
#include "MMain.h"


void CMainMenu::Initialize_t(void)
{
  // intialize main menu
  /*
  gm_mgTitle.mg_strText = "SERIOUS SAM - BETA";  // nothing to see here, kazuya
  gm_mgTitle.mg_boxOnScreen = BoxTitle();
  gm_lhGadgets.AddTail( gm_mgTitle.mg_lnNode);
  */

  bool bSkipSplitScreen = false;

#ifdef SE1_RAYTRACING
  bSkipSplitScreen = true;
#endif

  extern CTString sam_strVersion;
  gm_mgVersionLabel.mg_strText = sam_strVersion;
  gm_mgVersionLabel.mg_boxOnScreen = BoxVersion();
  gm_mgVersionLabel.mg_bfsFontSize = BFS_MEDIUM;
  gm_mgVersionLabel.mg_iCenterI = +1;
  gm_mgVersionLabel.mg_bEnabled = FALSE;
  gm_mgVersionLabel.mg_bLabel = TRUE;
  gm_lhGadgets.AddTail(gm_mgVersionLabel.mg_lnNode);

  extern CTString sam_strModName;
  gm_mgModLabel.mg_strText = sam_strModName;
  gm_mgModLabel.mg_boxOnScreen = BoxMediumRow(-2.0f);
  gm_mgModLabel.mg_bfsFontSize = BFS_MEDIUM;
  gm_mgModLabel.mg_iCenterI = 0;
  gm_mgModLabel.mg_bEnabled = FALSE;
  gm_mgModLabel.mg_bLabel = TRUE;
  gm_lhGadgets.AddTail(gm_mgModLabel.mg_lnNode);

  float iRow = 0.0f;

  gm_mgSingle.mg_strText = TRANS("SINGLE PLAYER");
  gm_mgSingle.mg_bfsFontSize = BFS_LARGE;
  gm_mgSingle.mg_boxOnScreen = BoxBigRow(iRow++);
  gm_mgSingle.mg_strTip = TRANS("single player game menus");
  gm_lhGadgets.AddTail(gm_mgSingle.mg_lnNode);
  gm_mgSingle.mg_pmgUp = &gm_mgQuit;
  gm_mgSingle.mg_pmgDown = &gm_mgNetwork;
  gm_mgSingle.mg_pActivatedFunction = NULL;

  gm_mgNetwork.mg_strText = TRANS("NETWORK");
  gm_mgNetwork.mg_bfsFontSize = BFS_LARGE;
  gm_mgNetwork.mg_boxOnScreen = BoxBigRow(iRow++);
  gm_mgNetwork.mg_strTip = TRANS("LAN/iNet multiplayer menus");
  gm_lhGadgets.AddTail(gm_mgNetwork.mg_lnNode);
  gm_mgNetwork.mg_pmgUp = &gm_mgSingle;
  // skip split screen 
  gm_mgNetwork.mg_pmgDown = bSkipSplitScreen ? &gm_mgDemo : &gm_mgSplitScreen;
  gm_mgNetwork.mg_pActivatedFunction = NULL;

  // disable split screen menu if using ray tracing
  gm_mgSplitScreen.mg_strText = TRANS("SPLIT SCREEN");
  gm_mgSplitScreen.mg_bfsFontSize = BFS_LARGE;
  gm_mgSplitScreen.mg_boxOnScreen = BoxBigRow(iRow);
  gm_mgSplitScreen.mg_strTip = TRANS("play with multiple players on one computer");
  // don't add list, if should be disabled
  if (!bSkipSplitScreen)
  {
    iRow++;
    gm_lhGadgets.AddTail(gm_mgSplitScreen.mg_lnNode);
  }
  gm_mgSplitScreen.mg_pmgUp = &gm_mgNetwork;
  gm_mgSplitScreen.mg_pmgDown = &gm_mgDemo;
  gm_mgSplitScreen.mg_pActivatedFunction = NULL;

  gm_mgDemo.mg_strText = TRANS("DEMO");
  gm_mgDemo.mg_bfsFontSize = BFS_LARGE;
  gm_mgDemo.mg_boxOnScreen = BoxBigRow(iRow++);
  gm_mgDemo.mg_strTip = TRANS("play a game demo");
  gm_lhGadgets.AddTail(gm_mgDemo.mg_lnNode);
  gm_mgDemo.mg_pmgUp = bSkipSplitScreen ?  &gm_mgNetwork : &gm_mgSplitScreen;
  gm_mgDemo.mg_pmgDown = &gm_mgMods;
  gm_mgDemo.mg_pActivatedFunction = NULL;

  gm_mgMods.mg_strText = TRANS("MODS");
  gm_mgMods.mg_bfsFontSize = BFS_LARGE;
  gm_mgMods.mg_boxOnScreen = BoxBigRow(iRow++);
  gm_mgMods.mg_strTip = TRANS("run one of installed game modifications");
  gm_lhGadgets.AddTail(gm_mgMods.mg_lnNode);
  gm_mgMods.mg_pmgUp = &gm_mgDemo;
  gm_mgMods.mg_pmgDown = &gm_mgHighScore;
  gm_mgMods.mg_pActivatedFunction = NULL;

  gm_mgHighScore.mg_strText = TRANS("HIGH SCORES");
  gm_mgHighScore.mg_bfsFontSize = BFS_LARGE;
  gm_mgHighScore.mg_boxOnScreen = BoxBigRow(iRow++);
  gm_mgHighScore.mg_strTip = TRANS("view list of top ten best scores");
  gm_lhGadgets.AddTail(gm_mgHighScore.mg_lnNode);
  gm_mgHighScore.mg_pmgUp = &gm_mgMods;
  gm_mgHighScore.mg_pmgDown = &gm_mgOptions;
  gm_mgHighScore.mg_pActivatedFunction = NULL;

  gm_mgOptions.mg_strText = TRANS("OPTIONS");
  gm_mgOptions.mg_bfsFontSize = BFS_LARGE;
  gm_mgOptions.mg_boxOnScreen = BoxBigRow(iRow++);
  gm_mgOptions.mg_strTip = TRANS("adjust video, audio and input options");
  gm_lhGadgets.AddTail(gm_mgOptions.mg_lnNode);
  gm_mgOptions.mg_pmgUp = &gm_mgHighScore;
  gm_mgOptions.mg_pmgDown = &gm_mgQuit;
  gm_mgOptions.mg_pActivatedFunction = NULL;

  gm_mgQuit.mg_strText = TRANS("QUIT");
  gm_mgQuit.mg_bfsFontSize = BFS_LARGE;
  gm_mgQuit.mg_boxOnScreen = BoxBigRow(iRow++);
  gm_mgQuit.mg_strTip = TRANS("exit game immediately");
  gm_lhGadgets.AddTail(gm_mgQuit.mg_lnNode);
  gm_mgQuit.mg_pmgUp = &gm_mgOptions;
  gm_mgQuit.mg_pmgDown = &gm_mgSingle;
  gm_mgQuit.mg_pActivatedFunction = NULL;
}

void CMainMenu::StartMenu(void)
{
  gm_mgSingle.mg_bEnabled = IsMenuEnabled("Single Player");
  gm_mgNetwork.mg_bEnabled = IsMenuEnabled("Network");
  gm_mgSplitScreen.mg_bEnabled = IsMenuEnabled("Split Screen");
  gm_mgHighScore.mg_bEnabled = IsMenuEnabled("High Score");
  CGameMenu::StartMenu();
}