/* ==========================================================================
* 작 성 자 : 이순규
* 작 성 일 : 2007.06.05
* 내    용 : 
* 주의사항 : 
*===========================================================================*/
#pragma once
#include "Lexer.h"

enum eNpcFunc;

/// 퀘스트 진행상황에 따른 연결 페이지
struct sQuestLinkPage
{
	unsigned long newIndex;
	unsigned long playIndex;
	unsigned long completeIndex;
	unsigned long rewardIndex;

	sQuestLinkPage::sQuestLinkPage()
	{
		newIndex = 0;
		playIndex = 0;
		rewardIndex = 0;
	}
};

/// Npc 대사 및 기능
struct sPageText;
class cPage;
class cParser;
class cUINpcTelling
{
public:
	cUINpcTelling();
	~cUINpcTelling();

	bool Load( cParser& parser );

	/// 기본 대사는 랜덤 획득
	sPageText* GetDefaultTextRandomly();
	unsigned long GetDefaultScene();	/// 기본장면 인덱스 

	///
	cPage* GetPage( unsigned long pageIdx );

	/// 퀘스트 관련 페이지 정보 가져오기
	sQuestLinkPage* GetQuestLinkPage( unsigned long questIdx );

	/// 기능
	int GetFuncCount() { return mFuncCount; }
	eNpcFunc GetFunc( int i );
	//eNpcFunc GetFunc() const;

	/// 
	unsigned long GetTarotIndex() { return mTarotIndex; }
	unsigned long GetTarotPrice() { return mTarotPrice; }
	short GetSpreadCount() { return mSpreadCount; }
	unsigned long* GetSpreadArr() { return mSpreadIndex; }

protected:
	bool LoadQuestLink( cParser& parser, sQuestLinkPage* linkPage );
	bool LoadPageList( cParser& parser, unsigned long& rewardIndex );
	bool LoadPage( cParser& parser, cPage* page );
	
private:
	/// 기본 대사 페이지 정보
	unsigned long mDefaultTextIndex;

	/// 퀘스트 페이지 정보 맵
	typedef tPointerHashMap<unsigned long, void*> cQuestLinkPage;
	cQuestLinkPage mQuestLinkPage;

	/// 기능 - 최대 5개
	eNpcFunc mFunc[5];
	int	mFuncCount;

	/// 가진 카드 덱
	unsigned long mTarotIndex;

	/// 타로점집 요금
	unsigned long mTarotPrice;

	/// 가진 스프레드 정보
	short mSpreadCount;
	unsigned long mSpreadIndex[5];
};

inline eNpcFunc cUINpcTelling::GetFunc( int i )
{
	return ( i < 5 ) ? mFunc[i] : (eNpcFunc)0;
}

//////////////////////////////////////////////////////
/// Npc 토큰 타입
enum
{
	/// Npc 대화
	eTOKEN_NPC_TELLING = 100,

	/// 기능
	eTOKEN_STORE,
	eTOKEN_WAREHOUSE,
	eTOKEN_SKILLSTORE,
	eTOKEN_DISJOINT,
	eTOKEN_GUILD,
	eTOKEN_TAROT,
	eTOKEN_SPREAD,

	eTOKEN_TEXT,
	eTOKEN_PAGE,

	/// 기본 대사
	eTOKEN_DEFAULT,

	/// 퀘스트
	eTOKEN_QUEST,
	eTOKEN_NEW,
	eTOKEN_PLAY,
	eTOKEN_COMPLETE,

	eTOKEN_ANSWER,
	eTOKEN_SOUND,
	eTOKEN_SCENE,

	eTOKEN_NEXT,
	eTOKEN_EVENTYES,
	eTOKEN_EVENTREWARD,
	eTOKEN_EVENTCOMPLETE,
};

/// Npc 어휘 분석기
class cUINpcLexer : public cLexer
{
public:
	cUINpcLexer( const char* buffer, unsigned int size );
};