/***
 * 
 *  아티팩트 보조창
 * 
 * */
class ArtifactEnchantSubWnd extends UICommonAPI;

//const ARTIFACTTYE_NORMAL = 4398046511104;
//const ARTIFACTTYE_TYPE1  = 18014398509481984;
//const ARTIFACTTYE_TYPE2  = 144115188075855872;
//const ARTIFACTTYE_TYPE3  = 1152921504606846976;

var WindowHandle Me;
var ItemWindowHandle SubWnd_Item1;
var WindowHandle  DescriptionMsgWnd;

var TextBoxHandle Inventory_Title_TextBox;
var TextBoxHandle descTextBox;

//var L2Util util;
var InventoryWnd inventoryWndScript;

var ArtifactEnchantWnd ArtifactEnchantWndScript;

function OnRegisterEvent()
{
	//RegisterEvent(  );
}

function OnLoad()
{
	Initialize();
}

function Initialize()
{
	ArtifactEnchantWndScript = ArtifactEnchantWnd(GetScript("ArtifactEnchantWnd"));

	Me = GetWindowHandle( "ArtifactEnchantSubWnd" );
	Inventory_Title_TextBox = GetTextBoxHandle( "ArtifactEnchantSubWnd.Inventory_Title_TextBox" );

	SubWnd_Item1 = GetItemWindowHandle( "ArtifactEnchantSubWnd.SubWnd_Item1" );

	DescriptionMsgWnd = GetWindowHandle( "ArtifactEnchantSubWnd.DescriptionMsgWnd" );
	descTextBox       = GetTextBoxHandle( "ArtifactEnchantSubWnd.DescriptionMsgWnd.descTextBox" );

	inventoryWndScript = InventoryWnd(GetScript("InventoryWnd"));
}

function OnRClickItem( String strID, int index )
{
	OnDBClickItem(strID, index);
}

function OnDBClickItem( string ControlName, int index )
{
	local ItemInfo info;

	SubWnd_Item1.GetItem(index, info);

	if (info.Id.ClassID > 0) ArtifactEnchantWndScript.dropProcess(info);
}

// 창 비활성
function setEnable(bool bFlag)
{
	if (bFlag)
	{
		DescriptionMsgWnd.HideWindow();
	}
	else
	{		
		DescriptionMsgWnd.ShowWindow();		
	}
}

// 아티팩트 스크립트에서 꺼내온 값과 비교해서, 현재 아이템이 재료 항목에 있는지 조회
function bool isInArtifactGroup(out array<int> materialIDArray, int targetClassID)
{
	local int i;

	for(i = 0; i < materialIDArray.Length; i++)
	{
		// Debug("materialIDArray[ " @ i @ "] : " @ materialIDArray[i]);
		if (materialIDArray[i] == targetClassID)
		{
			// Debug("재료 조건에 포함된 아이템 ID" @ targetClassID);
			return true;
		}
	}

	return false;
}

// 무기, 집혼석 관련 아이템 윈도우 업데이트
// 아티팩트 그룹, 요구하는 최소 인챈트 수 
function syncInventory(int artifactGroupID, int reqMinEnchantedNum)
{
	local array<ItemInfo> itemArray;
	local array<int> materialIDArray;

	local array<ItemInfo> artifactItemArray;
	local int i;
	local bool bDoNotNeedGroupID;

	local int tmGroupID, materialCount, resultProb;

	SubWnd_Item1.Clear();
	class'UIDATA_INVENTORY'.static.GetAllArtifactItem(itemArray);
	Debug("bDoNotNeedGroupID:" @ string(bDoNotNeedGroupID));
	Debug("reqMinEnchantedNum" @ string(reqMinEnchantedNum));

	// 아트팩트 그룹 체크 안함.
	if (artifactGroupID == -1)
	{
		bDoNotNeedGroupID = true;
	}

	class'UIDATA_ARTIFACT'.static.GetArtifactMaterialGroupList(artifactGroupID, materialIDArray);

	//Debug("bDoNotNeedGroupID:"  @ bDoNotNeedGroupID);
	//Debug("reqMinEnchantedNum" @ reqMinEnchantedNum);

	for (i = 0; i < itemArray.Length;i++)
	{
		// 재료가 0이면 인챈트 불가, 추가 안함.
		materialCount = 0;

		// 집혼UI에서 사용 중인 아이템이 아니라면..,  
		// 봉인 된 아이템이 아니라면..,
		// 지정한 그룹 아티팩트 아이템인가?
		if (!ArtifactEnchantWndScript.externalCheckUsingItem(itemArray[i]) && 
			!itemArray[i].bSecurityLock &&
			(isInArtifactGroup(materialIDArray, itemArray[i].Id.ClassID) || bDoNotNeedGroupID) &&
			itemArray[i].Enchanted >= reqMinEnchantedNum)
			
		{

			// ttp 83409, 넣어도 더 이상 불가능한 아티팩트는 보조슬롯에 보이지 않도록 한다.
			// 아티팩트가 하나도 안꼽힌 상태에서만 체크
			if (ArtifactEnchantWndScript.getSlot(0).GetItemNum() == 0)
			{
				class'UIDATA_ARTIFACT'.static.GetArtifactEnchantCondition(itemArray[i].Id.ClassID, itemArray[i].Enchanted, tmGroupID, materialCount, resultProb);
			
				//Debug("name" @ itemArray[i].Name);
				//Debug("materialCount" @ materialCount);
				//Debug("itemArray[i].Enchanted" @ itemArray[i].Enchanted);
				//Debug("======> resultProb:::: " @ resultProb);

				// 재료 슬롯이 없다면 추가 안할 아이템, 패스 
				if (materialCount <= 0) continue;
			}
				
			artifactItemArray[artifactItemArray.Length] = itemArray[i];
		}
	}

	if (artifactItemArray.Length > 0) 
	{
		SortAttifactItemAndAddITem(artifactItemArray);
		descTextBox.SetText("");
	}
	else 
	{
		descTextBox.SetText(GetSystemMessage(4222));
	}


	if(SubWnd_Item1.GetItemNum() > 0)
	{
		setEnable(true);
	}
	else
	{
		setEnable(false);
	}
}


/********************************************************************************************
 * 정렬
 * ******************************************************************************************/
function SortAttifactItemAndAddITem (array<ItemInfo> ArtifactList) 
{
	local int i ;
	local Array<ItemInfo> ArtifactListNormal, ArtifactListType1, ArtifactListType2, ArtifactListType3;
	
	
	// 인챈트 수치로 맞추고 
	ArtifactList = getInstanceL2Util().sortByEnchanted( ArtifactList ) ;
	
	// 이름으로 맞추고 
	ArtifactList = getInstanceL2Util().sortByName( ArtifactList ) ;
	
	for  ( i = 0 ;i < ArtifactList.Length ; i++ ) 
	{
		switch ( ArtifactList[i].slotBitType ) 
		{	
			case INT64("18014398509481984"): // ARTIFACTTYE_TYPE1:
				 ArtifactListType1[ArtifactListType1.Length]   = ArtifactList[i];				
				 break;

			case INT64("144115188075855872"): // ARTIFACTTYE_TYPE2:
				 ArtifactListType2[ArtifactListType2.Length]   = ArtifactList[i];				
				 break;

			case INT64("1152921504606846976"): // ARTIFACTTYE_TYPE3:
				 ArtifactListType3[ArtifactListType3.Length]   = ArtifactList[i];				
				 break;

			case INT64("4398046511104"): // ARTIFACTTYE_NORMAL :
				 ArtifactListNormal[ArtifactListNormal.Length] = ArtifactList[i];				
				 break;
		}
	}

	SubWnd_Item1.Clear();

	// 아이템목록에 추가
	for  ( i = 0 ; i < ArtifactListType1.Length ; i ++ ) 
		SubWnd_Item1.AddItem(ArtifactListType1[i]);

	for  ( i = 0 ; i < ArtifactListType2.Length ; i ++ ) 
		SubWnd_Item1.AddItem(ArtifactListType2[i]);

	for  ( i = 0 ; i < ArtifactListType3.Length ; i ++ ) 
		SubWnd_Item1.AddItem(ArtifactListType3[i]);

	for  ( i = 0 ; i < ArtifactListNormal.Length ; i ++ ) 
		SubWnd_Item1.AddItem(ArtifactListNormal[i]);
}
defaultproperties
{
}
