/*
 * UIConstants
 *  
 *  @desc : Interface uc 코드내에서만 사용될 struct, const, enum 을 모아두는 곳.
 *
 */

class UIConstants extends UIScript;

//사용 안하는듯 해서 주석 처리
//const MAX_USER_LEVEL                   = 99;

const DEBUG_SPLIT_STR = "|::::|";

// 아티팩트
const ARTIFACTTYE_NORMAL = 4398046511104;
const ARTIFACTTYE_TYPE1 = 18014398509481984;
const ARTIFACTTYE_TYPE2 = 144115188075855872;
const ARTIFACTTYE_TYPE3 = 1152921504606846976;
const USE_XML_TELEPORT_UI = true;
const USE_XML_BOTTOM_BAR_UI = true;
const USE_AUTO_CRAFT_MINIMIZE = true;

enum MULTISELLSHOWTYPE 
{
	Normal,
	MaterialType,
	GOODSEXCHANGE,
	ENCHANTSCROLL,
	ITEMEXCHANGE
};

enum CrystalType
{
//	CRT_INVALID = -1,
	CRT_NONE,
	CRT_D,
	CRT_C,
	CRT_B,
	CRT_A,
	CRT_S,
	CRT_S80,
	CRT_S84,
	CRT_R,
	CRT_R95,
	CRT_R99,
	CRT_R110,
	CRT_EVENT
};

enum HuntingZoneType
{
	DOMINION,                     //0
	FIELD_HUNTING_ZONE_SOLO,      //1
	FIELD_HUNTING_ZONE_PARTY,     //2
	INSTANCE_ZONE_SOLO,           //3
	INSTANCE_ZONE_PARTY,          //4
	Agit,                         //5
	VILLAGE,                      //6
	etc,                          //7
	CASTLE,                       //8
	FORTRESS,                     //9
	FIELD_HUNTING_ZONE_PARTYWITH_SOLO,//10
	FIELD_HUNTING_ZONE_OUT_OF_USE,//11
	INSTANCE_ZONE_UNION, // 12
	Max
};

// 맵에서 사용할 서버 정보 타입
enum MapServerInfoType
{
	SIEGEWARFARE,                           // 공성전
	SIEGEWARFARE_DIMENSION,                 // 차원 공성전
	RAID_DIMENSION,                         // 차원 레이드
	CURSEDWEAPON_MAGICAL,                   // 마검 자리체
	CURSEDWEAPON_BLOOD,                     // 혈검 자리체
	AUCTION,                                // 경매
	DEFENSEWARFARE,                         // 크세르스 동맹 연합기지 방어전
	CURSEDWEAPON_MAGICAL_TreasureBox,       // 마검 자리체의 보물상자
	CURSEDWEAPON_BLOOD_TreasureBox,         // 혈검 아카마나프의 보물상자
	Max
};

struct MenuButtonSlotStruct
{
	var int CategoryIndex;
	var int buttonIndex;
	var string tooltipKey;
	var string SpecialParam;
	var string MenuName;
	var string buttonText;
	var Color buttonTextColor;
	var int nSequence;
	var int nBGTextureIndex;
};

struct MultiSellInfo
{
	var int MultiSellInfoID;
	var int MultiSellType;
	var INT64 NeededItemNum;
	var ItemInfo ResultItemInfo;
	var array<ItemInfo> OutputItemInfoList;
	var array<ItemInfo> InputItemInfoList;
};

// 맵 서버 정보
struct MapServerInfo
{
	// 현재 사용 중인가?
	var bool bUse;

	// 맵 왼쪽에 나타나는 버튼, 텍스쳐 정보
	var string normalTex;
	var string pushedTex;
	var string highlightTex;

	// 서버 정보 타입
	var int nServerInfoType;

	// 툴팁, 설명
	var string ToolTipString;
	var string descString;

	// 필요 할때 사용
	var string szReserved;

	// 사용 중인 버튼 이름
	var string buttonName;

	// 맵포커싱 하일라이트 텍스쳐를 출력하기 위한 좌표 정보를 얻으려고..
	var int nRegionID;

	var int nData;

	// 클릭 후 이동 위치
	//var Vector clickedLoc;
	var array<Vector> clickedLocArray;
	var int clickedLocClickCount;
};

struct RaidUIData
{
	var string raidMonsterName;
	var string raidDesc;

	var int nRaidMonsterID;
	var int nRaidMonsterLevel;
	var int nRaidMonsterZone;
	var string RaidMonsterZoneName;
	var string sortingKey;

	var int nMinLevel;
	var int nMaxLevel;
	var int Id;
	var Vector nWorldLoc;
};

// 낚시, 혈맹, 연금술등 스킬 배우기에서 사용하는 타입
struct SkillTrainInfo
{
	var string strIconName;
	var string strName;
	var string strEnchantName;
	var int Id;
	var int Level;
	var int SubLevel;
	var int requiredLevel;
	var INT64 spConsume;
};


// - 집혼석 정보
// 해당 api를 통해서 얻음, bool GetEnsoulStoneUIInfo( ItemID Id, out string EnsoulStoneUIInfo )
struct EnsoulStoneUIInfo
{
	var int slotType;
	var int ExtractionItemID;     // 집혼에 사용된 원래 아이템 이름(라이브에서 사용)
	var array<int> OptionId_Array;
};


// - 집혼 옵션 ID별 옵션 정보
// 해당 api를 통해서 얻음, bool GetEnsoulOptionUIInfo( int optionId, out string optionInfo )
struct EnsoulOptionUIInfo
{
	var int OptionID;
	var int OptionStep;
	var int OptionType;
	var string Name;
	var string Desc;
	var string Icontex;
	var string IconPanelTex;
	var int ExtractionItemID;  // 룬해제(집혼추출) 추출시 얻게될 아이템 ID입니다. 이 값이 0이면 추출 불가입니다.- 해외 2016-1-14추가
};


// - 집혼 수수료 정보
struct EnsoulFeeUIInfo
{
	var int nID;
	var INT64 ItemCount;
};


struct TextureStruct
{
	var string AnchorWindowName;
	var string texturePath;
	var string RelativePoint;
	var string AnchorPoint;
	var int textureOffsetX;
	var int textureOffsetY;
	var int textureW;
	var int textureH;
};

static function TextureStruct getTextureInfo(string texturePath, string AnchorWindowName, string RelativePoint, string AnchorPoint, int textureOffsetX, int textureOffsetY, int textureW, int textureH)
{
	local TextureStruct TS;

	TS.texturePath = texturePath;
	TS.AnchorWindowName = AnchorWindowName;
	TS.RelativePoint = RelativePoint;
	TS.AnchorPoint = AnchorPoint;
	TS.textureOffsetX = textureOffsetX;
	TS.textureOffsetY = textureOffsetY;
	TS.textureW = textureW;
	TS.textureH = textureH;
	return TS;
}

// 집혼석 정보 :EnsoulStoneUIInfo 
function GetEnsoulStoneUIInfo(ItemInfo eItemInfo, ItemID IdInfo, out EnsoulStoneUIInfo eStoneInfo)
{
	local string EnsoulStoneUIInfoParam;
	local int numOfOption, OptionID, i;
	local string parseStr;

	class'UIDATA_ENSOUL'.static.GetEnsoulStoneInfo(IdInfo, EnsoulStoneUIInfoParam);
	ParseInt(EnsoulStoneUIInfoParam, "SlotType", eStoneInfo.slotType);
	ParseInt(EnsoulStoneUIInfoParam, "ExtractionItemID", eStoneInfo.ExtractionItemID);
	Debug("EnsoulStoneUIInfoParam" @ EnsoulStoneUIInfoParam);
	Debug("eItemInfo.SlotBitType" @ string(eItemInfo.SlotBitType));
	if(eItemInfo.ItemType == EItemType.ITEM_WEAPON)
	{
		ParseInt(EnsoulStoneUIInfoParam, "NumOfWeaponOption", numOfOption);
		parseStr = "WeaponOptionId_";		
	}
	else if(eItemInfo.SlotBitType == 2048)
	{
		ParseInt(EnsoulStoneUIInfoParam, "NumOfLegsOption", numOfOption);
		parseStr = "LegsOptionId_";			
	}
	else if(eItemInfo.SlotBitType == 4096)
	{
		ParseInt(EnsoulStoneUIInfoParam, "NumOfFeetOption", numOfOption);
		parseStr = "FeetOptionId_";				
	}
	else if(eItemInfo.SlotBitType == 64)
	{
		ParseInt(EnsoulStoneUIInfoParam, "NumOfHeadOption", numOfOption);
		parseStr = "HeadOptionId_";					
	}
	else if(eItemInfo.SlotBitType == 512)
	{
		ParseInt(EnsoulStoneUIInfoParam, "NumOfGlovesOption", numOfOption);
		parseStr = "GlovesOptionId_";						
	}
	else if(eItemInfo.SlotBitType == 32768)
	{
		ParseInt(EnsoulStoneUIInfoParam, "NumOfOnepieceOption", numOfOption);
		parseStr = "OnepieceOptionId_";							
	}
	else if(eItemInfo.SlotBitType == 1024)
	{
		ParseInt(EnsoulStoneUIInfoParam, "NumOfChestOption", numOfOption);
		parseStr = "ChestOptionId_";								
	}
	else if(eItemInfo.SlotBitType == 16 || eItemInfo.SlotBitType == 32 || eItemInfo.SlotBitType == 48)
	{
		ParseInt(EnsoulStoneUIInfoParam, "NumOfFingerOption", numOfOption);
		parseStr = "FingerOptionId_";
	}
	else if(eItemInfo.SlotBitType == 2 || eItemInfo.SlotBitType == 4 || eItemInfo.SlotBitType == 6)
	{
		ParseInt(EnsoulStoneUIInfoParam, "NumOfEarOption", numOfOption);
		parseStr = "EarOptionId_";										
	}
	else if(eItemInfo.SlotBitType == 8)
	{
		ParseInt(EnsoulStoneUIInfoParam, "NumOfNeckOption", numOfOption);
		parseStr = "NeckOptionId_";
	}
	else if((eItemInfo.SlotBitType == 256) && IsSigilArmor(eItemInfo.Id) == false)
	{
		ParseInt(EnsoulStoneUIInfoParam, "NumOfShieldOption", numOfOption);
		parseStr = "ShieldOptionId_";
	}
	else if((eItemInfo.SlotBitType == 256) && IsSigilArmor(eItemInfo.Id))
	{
		ParseInt(EnsoulStoneUIInfoParam, "NumOfSigilOption", numOfOption);
		parseStr = "SigilOptionId_";
	}

	Debug("numOfOption" @ string(numOfOption));

	for(i = 0; i < numOfOption; i++)
	{
		ParseInt(EnsoulStoneUIInfoParam, parseStr $ string(i), OptionID);
		Debug("parseStr" @ parseStr $ string(i));
		Debug("optionId" @ string(OptionID));
		eStoneInfo.OptionId_Array.Length = eStoneInfo.OptionId_Array.Length + 1;
		eStoneInfo.OptionId_Array[eStoneInfo.OptionId_Array.Length - 1] = OptionID;
	}
}

// 집혼 옵션 정보 :EnsoulOptionUIInfo
function GetEnsoulOptionUIInfo(int nEnsoulOptionID, out EnsoulOptionUIInfo eOptionInfo)
{
	local string ensoulOptioEachParam;

	if(nEnsoulOptionID > 0)
	{
		// 집혼 옵션 정보 얻기
		class'UIDATA_ENSOUL'.static.GetEnsoulOptionInfo(nEnsoulOptionID, ensoulOptioEachParam);
		Debug("EnsoulStoneUIInfoParam" @ ensoulOptioEachParam);
		ParseInt(ensoulOptioEachParam, "OptionType", eOptionInfo.OptionType);
		ParseInt(ensoulOptioEachParam, "OptionStep", eOptionInfo.OptionStep);
		ParseString(ensoulOptioEachParam, "OptionName", eOptionInfo.Name);
		ParseString(ensoulOptioEachParam, "OptionDesc", eOptionInfo.Desc);
		ParseString(ensoulOptioEachParam, "IconTex", eOptionInfo.Icontex);
		ParseString(ensoulOptioEachParam, "IconPanelTex", eOptionInfo.IconPanelTex);

		// 해외 2016-1-14 추가 (룬해제)
		ParseInt(ensoulOptioEachParam, "ExtractionItemID", eOptionInfo.ExtractionItemID);

		eOptionInfo.OptionID = nEnsoulOptionID;
	}
	else
	{
		Debug("Error : GetEnsoulOptionUIInfo  ->  ensoulID is wrong");
	}
}

// 집혼 가격과 필요 아이템 수 리턴
function GetEnsoulFeeUIInfo(ItemInfo eInfo, ItemInfo stoneItemInfo, bool bIsRefee, int slotType, int SlotIndex, out EnsoulFeeUIInfo feeInfo)
{
	local string ensoulFeeInfoParam;

	class'UIDATA_ENSOUL'.static.GetEnsoulFeeInfoByItemId(stoneItemInfo.Id.ClassID, bIsRefee, SlotIndex, ensoulFeeInfoParam);
	Debug("GetEnsoulFeeInfoByItemId" @ string(eInfo.Id.ClassID) @ string(bIsRefee) @ string(SlotIndex));
	Debug("EnsoulStoneUIInfoParam:" @ ensoulFeeInfoParam);
	ParseInt(ensoulFeeInfoParam, "ItemID", feeInfo.nID);
	ParseINT64(ensoulFeeInfoParam, "ItemCount", feeInfo.ItemCount);
}

function bool IsUseRenewalSkillWnd()
{
	return IsAdenServer();
}

function bool IsUseSkillCastingSpeedStat()
{
	return IsAdenServer();
}
