class KFGFxHUD_ObjectiveConatiner extends GFxObject;

var float UpdateRate;
var KFInterface_MapObjective CurrentObjectiveInterface;

var Texture2d LastIcon;

var KFPlayerController KFPC;

var name SoundThemeName;
var name SoundCueName;

var float LastProgress;
var bool bLastMissionCritical;

var bool bPrevCompleted;

function InitializeHUD()
{
	KFPC = KFPlayerController(GetPC());
	SetVisible(false);
	LocalizeContainer();
}

function LocalizeContainer()
{
	local GFxObject TextObject;

	TextObject = CreateObject("Object");

	if (CurrentObjectiveInterface != none)
	{
		TextObject.SetString("failedString", Localize("Objectives", "FailedString", "KFGame"));
		TextObject.SetString("objectiveTitle", Localize("Objectives", "ObjectiveTitle", "KFGame"));
		TextObject.SetString("objectiveDesc", CurrentObjectiveInterface.GetLocalizedShortDescription());
	}


	SetObject("localizedText", TextObject);
}

simulated function SetActive(bool bActive)
{
	SetVisible(bActive);
	if (bActive)
	{
		CurrentObjectiveInterface = KFGameReplicationInfo(GetPC().WorldInfo.GRI).ObjectiveInterface;
		if (CurrentObjectiveInterface != none && CurrentObjectiveInterface.ShouldShowObjectiveContainer())
		{
			SetFailState(CurrentObjectiveInterface.HasFailedObjective());
			SetCurrentProgress(CurrentObjectiveInterface.GetProgress());
			LocalizeContainer();
			UpdateIcon();
			SetCompleted(CurrentObjectiveInterface.IsComplete());
			SetMissionCritical(CurrentObjectiveInterface.GetIsMissionCritical());
		}
		else
		{
			CurrentObjectiveInterface = none;
			SetVisible(false);
		}
	}
	else
	{
		CurrentObjectiveInterface = none;
		//hide actor count
		GetObject("objectiveNumberMC").SetVisible(false);
	}
	//SetBool("isActive", bActive); //nothing supporting this atm
}

function SetCompleted(bool bComplete)
{
	local GFxObject DataObject;

	DataObject = CreateObject("Object");

	DataObject.SetBool("bComplete", bComplete);
	DataObject.SetString("completeString", bComplete ? Localize("Objectives", "SuccessString", "KFGame") : "");
	SetObject("completeStatus", DataObject);

	if (!bComplete)
	{
		bPrevCompleted = false;
	}

	//play sound queue
	if (KFPC != none && KFPC.MyGFxHUD != none && bComplete && bComplete != bPrevCompleted)
	{
		KFPC.MyGFxHUD.PlaySoundFromTheme(SoundCueName, SoundThemeName);
		bPrevCompleted = true;
	}
}

function SetMissionCritical(bool bMissionCritical)
{
	bMissionCritical = false; //not using this for now
	if (bMissionCritical != bLastMissionCritical)
	{
		Setbool("missionCriticalStatus", bMissionCritical);
		bLastMissionCritical = bMissionCritical;
	}	
}

function SetCurrentIcon(string iconPath)
{
	if(iconPath == "")
	{
		SetString("currentIcon", "");
	}
	else
	{
		SetString("currentIcon", "img://"$iconPath);
	}
}

function TickHud(float DeltaTime)
{
	local int bStatusWarning, bStatusNotification;
	local string StatusMessage;
	local GFxObject DataObject;

	if (CurrentObjectiveInterface != none)
	{
		if (!CurrentObjectiveInterface.HasFailedObjective() && !CurrentObjectiveInterface.IsComplete())
		{
			SetString("currentProgressText", CurrentObjectiveInterface.GetProgressText());
			SetBool("currentProgressIsDosh", CurrentObjectiveInterface.GetProgressTextIsDosh());
		}

		CurrentObjectiveInterface.GetLocalizedStatus(StatusMessage, bStatusWarning, bStatusNotification);
		DataObject = CreateObject("Object");
		DataObject.SetBool("bStatusWarning", bool(bStatusWarning));
		DataObject.SetBool("bStatusNotification", bool(bStatusNotification));
		DataObject.SetString("StatusMessage", StatusMessage);
		SetObject("currentStatus", DataObject);

		SetInt("rewardValue", CurrentObjectiveInterface.GetDoshReward());
		SetCurrentProgress(CurrentObjectiveInterface.GetProgress());
		SetFailState(CurrentObjectiveInterface.HasFailedObjective());

		//UpdateRequirements();
		if (LastIcon != CurrentObjectiveInterface.GetIcon())
		{
			UpdateIcon();
		}
		SetMissionCritical(CurrentObjectiveInterface.GetIsMissionCritical());
	}
}

function UpdateIcon()
{
	LastIcon = CurrentObjectiveInterface.GetIcon();
	SetCurrentIcon(PathName(LastIcon));
}

function UpdateRequirements()
{
	/*local GFxObject DataObject;
	if (CurrentObjectiveInterface != none && CurrentObjectiveInterface.UsesProgress())
	{
		DataObject = CreateObject("Object");

	}*/
}

function SetFailState(bool bFailed)
{
	local GFxObject DataObject;

	DataObject = CreateObject("Object");

	DataObject.SetBool("bFailed", bFailed);
	DataObject.SetString("failedString", bFailed ? Localize("Objectives", "FailedString", "KFGame") : "");
	SetObject("failed", DataObject);
	if(bFailed)
	{
		//GetPC().SetTimer(10.0f, false, nameof(ClearObjectiveUI), self); //leave this out for now
	}
}

function ClearObjectiveUI()
{
	SetActive(false);
}

//pass a value from 0-1
function SetCurrentProgress(float CurrentProgress)
{
	if (LastProgress != CurrentProgress)
	{
		CurrentProgress = FClamp(CurrentProgress, 0, 1);
		LastProgress = CurrentProgress;
		SetInt("currentProgress", 100 * CurrentProgress);
		SetCompleted(CurrentObjectiveInterface.IsComplete());
	}
}

DefaultProperties
{
	LastProgress=-0.0f
	UpdateRate=0.1f
	bPrevCompleted=false
	SoundThemeName=UI
	SoundCueName=TraderTime_Countdown
}