/*********************************************************************
*	Levels
*	SOURCE FILE
*	Autor:	Michal Jirouš
*	Datum: 14.7.2008
*	Soubor: game_levels.cpp
*	Popis: Databaze levelu
**********************************************************************/

#include "game_levels.h"
#include "sys_console.h"
#include "parsing.h"
#include "textLibrary.h"
#include <fstream>

using namespace parsing;
using namespace levels;
using namespace std;
using namespace systemConsole;


map<string,LevelInfo> levelMap;

//nacteni databaze
bool levels::loadDatabase( const char *filename )
{
	console << "Loading level database..." << endline;
	ifstream fin( filename );
	if( !fin.is_open() )
	{
		console << "Error while loading level database from '" << filename << "'." << endline;
		return false;
	}

	std::string sLevelName;
	LevelInfo newInfo;
	while( true )
	{
		sLevelName = readField( fin );	//cteni po polich
		if( fin.eof() )
			break;
		newInfo.m_sName = readField( fin );
		newInfo.m_iDifficulty = atoi( readField( fin ).c_str() );
		newInfo.m_sDescription = readField( fin );

		levelMap.insert( make_pair( sLevelName, newInfo ) );
	}

	console << "Level database successfuly loaded." << endline;
	return true;
}


std::string levels::getDifficultyName( int diff )
{
	switch( diff )
	{
		case EASY:
			return textLibrary::getText( 17 );	//TODO - wtf cisla? -> konstanty tam narvat z textlibrary
		case MEDIUM:
			return textLibrary::getText( 18 );
		case HARD:
			return textLibrary::getText( 19 );
	}
	return "";
}

LevelInfo * levels::getLevelInfo( string levelName )
{
	map<string,LevelInfo>::iterator iter = levelMap.find( levelName );
	if( iter == levelMap.end() )
	{
		levelName += ".bsp";
		iter = levelMap.find( levelName );
		if( iter == levelMap.end() )
			return NULL;
	}
	return &iter->second;
}

map<string,LevelInfo> &levels::getLevels()
{
	return levelMap;
}

