#pragma once

#include "CoreMinimal.h"
#include "HyperTwistTraining/HyperTwistTrainingPanelWidget.h"
#include "HyperTwistCoachDashboardWidget.generated.h"

class UButton;
class UEditableTextBox;
class UTextBlock;
class UVerticalBox;

enum class EHyperTwistCoachDashboardAttemptPhase : uint8
{
	Idle,
	Inspection,
	Paused,
	Solving
};

enum class EHyperTwistCoachDashboardGuidancePreviewLane : uint8
{
	None,
	Recommended,
	FollowUp
};

enum class EHyperTwistCoachDashboardOutcomeAction : uint8
{
	None,
	RepeatSelectedCase,
	RepeatPreviewDeck,
	BroadenPreviewDeck,
	RedirectCoachGuidance
};

struct FHyperTwistCoachDashboardDecisionHistoryEntry
{
	FString RecordedAtUtc;
	FString SourceSessionId;
	EHyperTwistCoachDashboardGuidancePreviewLane GuidanceLane =
		EHyperTwistCoachDashboardGuidancePreviewLane::None;
	bool bSingleCaseScope = false;
	FString SelectedCaseId;
	FString BriefHeadline;
	FString RecommendedActionLabel;
	EHyperTwistCoachDashboardOutcomeAction RecommendedAction =
		EHyperTwistCoachDashboardOutcomeAction::None;
	FString AppliedActionLabel;
	EHyperTwistCoachDashboardOutcomeAction AppliedAction =
		EHyperTwistCoachDashboardOutcomeAction::None;
	float SuccessRate = 0.0f;
	int32 CompletedAttemptCount = 0;
	int32 TotalMistakes = 0;
	int32 LaunchedCaseCount = 0;
	int32 ReferenceCaseCount = 0;
	bool bBroadenedLaunchScope = false;
	bool bTightenedLaunchScope = false;
	FString LaunchBudgetReasonLine;
	int32 ReliableAlignedTrustedTightPlanOutcomeHistoryCount = 0;
	int32 ReliableAlignedTrustedBroadPlanOutcomeHistoryCount = 0;
	float ReliableAlignedTrustedTightPlanOutcomeAverageScore = 0.0f;
	float ReliableAlignedTrustedBroadPlanOutcomeAverageScore = 0.0f;
	bool bUsedReliableAlignedTrustedTightPlanOutcomeHistory = false;
	bool bUsedReliableAlignedTrustedBroadPlanOutcomeHistory = false;

	bool IsStructurallyValid() const
	{
		return !RecordedAtUtc.IsEmpty()
			&& !SourceSessionId.IsEmpty()
			&& RecommendedAction != EHyperTwistCoachDashboardOutcomeAction::None
			&& AppliedAction != EHyperTwistCoachDashboardOutcomeAction::None;
	}
};

struct FHyperTwistCoachDashboardDecisionWeighting
{
	int32 MatchingDecisionCount = 0;
	int32 RepeatSelectedCaseCount = 0;
	int32 RepeatPreviewDeckCount = 0;
	int32 BroadenPreviewDeckCount = 0;
	int32 RedirectCoachGuidanceCount = 0;
	int32 BroadenedLaunchCount = 0;
	int32 TightenedLaunchCount = 0;
	int32 ClosureContinuationBias = 0;
	int32 ClosureSuppressionBias = 0;
	int32 DeferredOverflowContinuationBias = 0;
	int32 DeferredOverflowCaseCount = 0;
	int32 ReliableAlignedTrustedTightPlanOutcomeHistoryCount = 0;
	int32 ReliableAlignedTrustedBroadPlanOutcomeHistoryCount = 0;
	int32 ReliableAlignedTrustedTightContinuationDecisionCount = 0;
	int32 ReliableAlignedTrustedBroadRedirectDecisionCount = 0;
	EHyperTwistCoachDashboardOutcomeAction BaseAction =
		EHyperTwistCoachDashboardOutcomeAction::None;
	EHyperTwistCoachDashboardOutcomeAction WeightedAction =
		EHyperTwistCoachDashboardOutcomeAction::None;
	EHyperTwistCoachDashboardOutcomeAction LastAppliedAction =
		EHyperTwistCoachDashboardOutcomeAction::None;
	float AverageSuccessRate = 0.0f;
	float AverageLaunchCaseCount = 0.0f;
	float BroadenedLaunchAverageSuccessRate = 0.0f;
	float TightenedLaunchAverageSuccessRate = 0.0f;
	float ReliableAlignedTrustedTightPlanOutcomeAverageScore = 0.0f;
	float ReliableAlignedTrustedBroadPlanOutcomeAverageScore = 0.0f;
	bool bHasOverride = false;
	bool bUsedClosureHistorySignal = false;
	bool bUsedDeferredOverflowSignal = false;
	bool bUsedReliableAlignedPlanOutcomeSignal = false;

	bool IsStructurallyValid() const
	{
		return MatchingDecisionCount > 0
			&& BaseAction != EHyperTwistCoachDashboardOutcomeAction::None
			&& WeightedAction != EHyperTwistCoachDashboardOutcomeAction::None;
	}
};

struct FHyperTwistCoachDashboardGuidanceLanePreference
{
	EHyperTwistCoachDashboardGuidancePreviewLane PreferredLane =
		EHyperTwistCoachDashboardGuidancePreviewLane::None;
	int32 RecommendedDecisionCount = 0;
	int32 FollowUpDecisionCount = 0;
	int32 RecommendedContinueBias = 0;
	int32 FollowUpContinueBias = 0;
	int32 ClosureContinuationBias = 0;
	int32 ClosureSuppressionBias = 0;
	int32 ReliableAlignedTrustedTightPlanOutcomeHistoryCount = 0;
	int32 ReliableAlignedTrustedBroadPlanOutcomeHistoryCount = 0;
	int32 ReliableAlignedTrustedTightContinuationBias = 0;
	int32 ReliableAlignedTrustedBroadRedirectBias = 0;
	float RecommendedAverageSuccessRate = 0.0f;
	float FollowUpAverageSuccessRate = 0.0f;
	float ReliableAlignedTrustedTightPlanOutcomeAverageScore = 0.0f;
	float ReliableAlignedTrustedBroadPlanOutcomeAverageScore = 0.0f;
	bool bHasDecisionSignal = false;
	bool bHasClosureHistorySignal = false;
	bool bHasReliableAlignedPlanOutcomeSignal = false;

	bool IsStructurallyValid() const
	{
		return PreferredLane != EHyperTwistCoachDashboardGuidancePreviewLane::None;
	}
};

struct FHyperTwistCoachDashboardQueueRecoveryOutcome
{
	enum class EActionKind : uint8
	{
		None,
		PromoteDeferred,
		LaunchRecovery
	};

	FString RecordedAtUtc;
	FString SourceLabel;
	FString AppliedActionLabel;
	EActionKind ActionKind = EActionKind::None;
	float BeforePressureScore = 0.0f;
	float AfterPressureScore = 0.0f;
	int32 BeforeDeferredEventCount = 0;
	int32 AfterDeferredEventCount = 0;
	bool bBeforeBlockedFollowUp = false;
	bool bAfterBlockedFollowUp = false;
	bool bBeforeOutstandingDeferred = false;
	bool bAfterOutstandingDeferred = false;
	bool bBeforeCompletionGap = false;
	bool bAfterCompletionGap = false;
	bool bSucceeded = false;
	bool bReducedFriction = false;
	bool bShiftedFriction = false;
	bool bUsedDeferredFirstSuppressionSignal = false;
	bool bUsedMethodDrillHandoffSignal = false;
	bool bUsedNarrowMethodDrillPacketStructureRecovery = false;
	bool bUsedBroadMethodDrillPacketStructureRecovery = false;
	bool bUsedStrongRetainedMethodDrillRecoveryPosture = false;
	bool bUsedWeakRetainedMethodDrillRecoveryPosture = false;
	bool bUsedReliableTrustedTightStructurePlanRecovery = false;
	bool bUsedReliableTrustedBroadStructurePlanRecovery = false;
	bool bUsedReliableAlignedTrustedTightStructurePlanRecovery = false;
	bool bUsedReliableAlignedTrustedBroadStructurePlanRecovery = false;

	bool IsStructurallyValid() const
	{
		return !RecordedAtUtc.IsEmpty() && !AppliedActionLabel.IsEmpty();
	}
};

struct FHyperTwistCoachDashboardQueueRecoveryWeighting
{
	int32 PromoteCount = 0;
	int32 PromoteReducedCount = 0;
	int32 PromoteFailureCount = 0;
	int32 LaunchCount = 0;
	int32 LaunchReducedCount = 0;
	int32 LaunchFailureCount = 0;
	int32 DeferredFirstPromoteCount = 0;
	int32 DeferredFirstPromoteReducedCount = 0;
	int32 DeferredFirstLaunchCount = 0;
	int32 DeferredFirstLaunchReducedCount = 0;
	int32 MethodDrillPromoteCount = 0;
	int32 MethodDrillPromoteReducedCount = 0;
	int32 MethodDrillPromoteFailureCount = 0;
	int32 MethodDrillLaunchCount = 0;
	int32 MethodDrillLaunchReducedCount = 0;
	int32 MethodDrillLaunchFailureCount = 0;
	int32 NarrowMethodDrillPacketStructureLaunchCount = 0;
	int32 NarrowMethodDrillPacketStructureLaunchReducedCount = 0;
	int32 BroadMethodDrillPacketStructurePromoteCount = 0;
	int32 BroadMethodDrillPacketStructurePromoteReducedCount = 0;
	int32 StrongRetainedMethodDrillLaunchCount = 0;
	int32 StrongRetainedMethodDrillLaunchReducedCount = 0;
	int32 WeakRetainedMethodDrillPromoteCount = 0;
	int32 WeakRetainedMethodDrillPromoteReducedCount = 0;
	int32 MethodDrillPromoteBiasCount = 0;
	int32 MethodDrillLaunchBiasCount = 0;
	int32 MethodDrillUpstreamHistoryCount = 0;
	int32 MethodDrillUpstreamStrongCount = 0;
	int32 MethodDrillUpstreamWeakCount = 0;
	int32 ReliableTrustedTightPlanHistoryCount = 0;
	int32 ReliableTrustedBroadPlanHistoryCount = 0;
	int32 ReliableTrustedTightPlanLaunchCount = 0;
	int32 ReliableTrustedTightPlanLaunchReducedCount = 0;
	int32 ReliableTrustedBroadPlanPromoteCount = 0;
	int32 ReliableTrustedBroadPlanPromoteReducedCount = 0;
	int32 ReliableTrustedTightPlanBiasCount = 0;
	int32 ReliableTrustedBroadPlanBiasCount = 0;
	int32 ReliableAlignedTrustedTightPlanHistoryCount = 0;
	int32 ReliableAlignedTrustedBroadPlanHistoryCount = 0;
	int32 ReliableAlignedTrustedTightPlanLaunchCount = 0;
	int32 ReliableAlignedTrustedTightPlanLaunchReducedCount = 0;
	int32 ReliableAlignedTrustedBroadPlanPromoteCount = 0;
	int32 ReliableAlignedTrustedBroadPlanPromoteReducedCount = 0;
	int32 ReliableAlignedTrustedTightPlanBiasCount = 0;
	int32 ReliableAlignedTrustedBroadPlanBiasCount = 0;
	int32 ReliableAlignedTrustedTightPlanOutcomeHistoryCount = 0;
	int32 ReliableAlignedTrustedBroadPlanOutcomeHistoryCount = 0;
	int32 ReliableAlignedTrustedTightPlanOutcomeBiasCount = 0;
	int32 ReliableAlignedTrustedBroadPlanOutcomeBiasCount = 0;
	float PromoteAveragePressureDelta = 0.0f;
	float LaunchAveragePressureDelta = 0.0f;
	float MethodDrillUpstreamAverageOutcomeScore = 0.0f;
	float ReliableTrustedTightPlanAverageOutcomeScore = 0.0f;
	float ReliableTrustedBroadPlanAverageOutcomeScore = 0.0f;
	float ReliableAlignedTrustedTightPlanAverageOutcomeScore = 0.0f;
	float ReliableAlignedTrustedBroadPlanAverageOutcomeScore = 0.0f;
	float ReliableAlignedTrustedTightPlanOutcomeAverageScore = 0.0f;
	float ReliableAlignedTrustedBroadPlanOutcomeAverageScore = 0.0f;
	FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind PreferredActionKind =
		FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::None;
	bool bHasSignal = false;
	bool bHasDeferredFirstSignal = false;
	bool bHasMethodDrillSignal = false;
	bool bHasMethodDrillOutcomeSignal = false;
	bool bHasMethodDrillMemorySignal = false;
	bool bHasReliableTrustedPlanSignal = false;
	bool bHasReliableTrustedPlanOutcomeSignal = false;
	bool bHasReliableAlignedTrustedPlanSignal = false;
	bool bHasReliableAlignedTrustedPlanOutcomeSignal = false;
	bool bHasReliableAlignedTrustedPlanHandoffOutcomeSignal = false;

	bool IsStructurallyValid() const
	{
		return bHasSignal
			&& PreferredActionKind != FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::None;
	}
};

struct FHyperTwistCoachDashboardQueueSuppressionEntry
{
	FString RecordedAtUtc;
	int32 TotalQueueEntryCount = 0;
	int32 ReadyQueueEntryCount = 0;
	EHyperTwistTrainingCoachGuidanceLane PreferredGuidanceLane =
		EHyperTwistTrainingCoachGuidanceLane::None;
	EHyperTwistTrainingQueueRecoveryAction PreferredRecoveryAction =
		EHyperTwistTrainingQueueRecoveryAction::None;
	float PressureScore = 0.0f;
	FString DominantDeferralReasonLabel;
	bool bSuppressedPrimaryQueueCreation = false;
	bool bSuppressedFollowUpQueueCreation = false;
	FString PrimaryQueueSuppressionReason;
	FString FollowUpQueueSuppressionReason;

	bool IsStructurallyValid() const
	{
		return !RecordedAtUtc.IsEmpty()
			&& (bSuppressedPrimaryQueueCreation || bSuppressedFollowUpQueueCreation);
	}
};

struct FHyperTwistCoachDashboardClosureRecoveryEntry
{
	FString RecordedAtUtc;
	int32 HistoricalFollowUpContinuationCount = 0;
	int32 HistoricalBorderlineFollowUpSuppressionCount = 0;
	bool bFollowUpContinuationFromRecoveryHistory = false;
	bool bBorderlineFollowUpSuppressedByRecoveryHistory = false;
	EHyperTwistTrainingCoachGuidanceLane PreferredGuidanceLane =
		EHyperTwistTrainingCoachGuidanceLane::None;
	FString PreferredGuidanceSourceLabel;
	FString ClosurePolicyLine;
	FString ActiveSignalId;
	FString ActiveSignalHeadline;
	FString ActiveSignalDetail;
	float ActiveSignalScore = 0.0f;
	bool bActiveSignalPromoted = false;

	bool IsStructurallyValid() const
	{
		return !RecordedAtUtc.IsEmpty()
			&& (HistoricalFollowUpContinuationCount > 0
				|| HistoricalBorderlineFollowUpSuppressionCount > 0
				|| bFollowUpContinuationFromRecoveryHistory
				|| bBorderlineFollowUpSuppressedByRecoveryHistory
				|| !ActiveSignalId.IsEmpty()
				|| !ClosurePolicyLine.IsEmpty());
	}
};

struct FHyperTwistCoachDashboardHandoffHistoryEntry
{
	FString RecordedAtUtc;
	FString RecommendedHandoffKindLabel;
	FString RecommendationStatusLine;
	FString RecommendationDetailLine;
	FString QueueSourceLabel;
	EHyperTwistTrainingCoachGuidanceLane PreferredGuidanceLane =
		EHyperTwistTrainingCoachGuidanceLane::None;
	FString PreferredGuidanceSourceLabel;
	EHyperTwistTrainingQueueRecoveryAction PreferredRecoveryAction =
		EHyperTwistTrainingQueueRecoveryAction::None;
	FString PreferredRecoveryActionSourceLabel;
	int32 AcceptedQueuedHandoffCount = 0;
	int32 AcceptedFollowUpHandoffCount = 0;
	int32 AcceptedRecommendedHandoffCount = 0;
	int32 AcceptedDeferredOverflowQueuedHandoffCount = 0;
	int32 AcceptedDeferredOverflowFollowUpHandoffCount = 0;
	int32 AcceptedDeferredOverflowRecommendedHandoffCount = 0;
	int32 AcceptedMethodDrillQueuedHandoffCount = 0;
	int32 AcceptedMethodDrillFollowUpHandoffCount = 0;
	int32 AcceptedMethodDrillRecommendedHandoffCount = 0;
	int32 AcceptedAlignedTightFollowUpOutcomeHandoffCount = 0;
	int32 AcceptedAlignedBroadRecommendedOutcomeHandoffCount = 0;
	int32 AcceptedAlignedTightFollowUpPacketHandoffCount = 0;
	int32 AcceptedAlignedBroadRecommendedPacketHandoffCount = 0;
	int32 ReliableAcceptedAlignedTightFollowUpPacketOutcomeHandoffCount = 0;
	int32 ReliableAcceptedAlignedBroadRecommendedPacketOutcomeHandoffCount = 0;
	int32 ReliableAlignedTrustedTightPlanOutcomeHistoryCount = 0;
	int32 ReliableAlignedTrustedBroadPlanOutcomeHistoryCount = 0;
	float ReliableAlignedTrustedTightPlanOutcomeAverageScore = 0.0f;
	float ReliableAlignedTrustedBroadPlanOutcomeAverageScore = 0.0f;
	int32 ClosureContinuationBias = 0;
	int32 ClosureSuppressionBias = 0;
	bool bQueueReady = false;
	bool bFollowUpReady = false;
	bool bRecommendedReady = false;
	bool bUsedDeferredFirstSuppressionSignal = false;
	bool bUsedMethodDrillWeighting = false;
	bool bUsedStrongRetainedMethodDrillRecoveryPosture = false;
	bool bUsedWeakRetainedMethodDrillRecoveryPosture = false;
	bool bUsedReliableTrustedTightStructurePlanHistory = false;
	bool bUsedReliableTrustedBroadStructurePlanHistory = false;
	bool bUsedReliableAlignedTrustedTightStructurePlanHistory = false;
	bool bUsedReliableAlignedTrustedBroadStructurePlanHistory = false;
	bool bUsedReliableAlignedTrustedTightStructurePlanOutcomeHistory = false;
	bool bUsedReliableAlignedTrustedBroadStructurePlanOutcomeHistory = false;

	bool IsStructurallyValid() const
	{
		return !RecordedAtUtc.IsEmpty()
			&& !RecommendedHandoffKindLabel.IsEmpty()
			&& !RecommendationStatusLine.IsEmpty();
	}
};

struct FHyperTwistCoachDashboardTemplateLaunchHistoryEntry
{
	FString RecordedAtUtc;
	FString SourceSessionId;
	FString TemplateId;
	FString TemplateTitle;
	FString UserId;
	FString FocusDeckId;
	FString SourceReviewPlanId;
	EHyperTwistTrainingSessionTemplateKind TemplateKind =
		EHyperTwistTrainingSessionTemplateKind::Recovery;
	EHyperTwistTrainingSessionState SessionState =
		EHyperTwistTrainingSessionState::Created;
	EHyperTwistTrainingDeliveryMode SuggestedMode = EHyperTwistTrainingDeliveryMode::Timer;
	EHyperTwistTrainingSelectionPolicy SuggestedSelectionPolicy =
		EHyperTwistTrainingSelectionPolicy::Weighted;
	int32 RecommendedCaseCount = 0;
	int32 FocusCaseCount = 0;
	int32 CompletedAttemptCount = 0;
	int32 TotalMistakes = 0;
	float SuccessRate = 0.0f;
	FString CompletedAtUtc;
	bool bPreferReviewRun = false;
	bool bCoachReview = false;
	bool bPreferShortReviewSet = false;
	FHyperTwistTrainingTemplateLaunchSelectionProvenance SelectionProvenance;

	bool IsStructurallyValid() const
	{
		return !RecordedAtUtc.IsEmpty()
			&& !SourceSessionId.IsEmpty()
			&& !TemplateId.IsEmpty();
	}
};

struct FHyperTwistCoachDashboardMethodDrillFollowUpHistoryEntry
{
	FString RecordedAtUtc;
	FString SourceRunId;
	FString SourceDrillId;
	FString SourceSessionId;
	FString StageLabel;
	EHyperTwistTrainingMethodDrillDiagnosticState DiagnosticState =
		EHyperTwistTrainingMethodDrillDiagnosticState::Unknown;
	EHyperTwistTrainingReviewGrade RecommendedReviewGrade = EHyperTwistTrainingReviewGrade::Good;
	EHyperTwistTrainingSessionTemplateKind TemplateKind =
		EHyperTwistTrainingSessionTemplateKind::ReviewPlan;
	EHyperTwistTrainingDeliveryMode SuggestedMode = EHyperTwistTrainingDeliveryMode::Timer;
	EHyperTwistTrainingSelectionPolicy SuggestedSelectionPolicy =
		EHyperTwistTrainingSelectionPolicy::Weighted;
	int32 FocusCaseCount = 0;
	int32 LaunchedCaseCount = 0;
	int32 CompletedAttemptCount = 0;
	int32 TotalMistakes = 0;
	float SuccessRate = 0.0f;
	FString PacketStructureLabel;
	FString PacketLaneLabel;
	FString PacketStanceLabel;
	bool bBoundaryPending = false;
	bool bBoundaryRepeatBurden = false;
	bool bBoundaryAssistance = false;
	bool bPacketProvenStrongContinuation = false;
	bool bPacketProvenWeakRedirect = false;

	bool IsStructurallyValid() const
	{
		return !RecordedAtUtc.IsEmpty()
			&& !SourceRunId.IsEmpty()
			&& !SourceDrillId.IsEmpty()
			&& !SourceSessionId.IsEmpty();
	}
};

struct FHyperTwistCoachDashboardMethodDrillRecoveryMemoryHistoryEntry
{
	FString RecordedAtUtc;
	EHyperTwistTrainingQueueRecoveryAction PreferredRecoveryAction =
		EHyperTwistTrainingQueueRecoveryAction::None;
	FString PreferredRecoveryActionSourceLabel;
	FString RecommendedHandoffKindLabel;
	FString QueueRecoveryStatusLine;
	FString HandoffRecommendationStatusLine;
	FString GeneratedGuidancePacketKindLabel;
	FString GeneratedGuidancePacketSourceLabel;
	FString GeneratedGuidancePacketHeadline;
	FString GeneratedGuidancePacketActionLabel;
	int32 GeneratedGuidancePacketFocusCaseCount = 0;
	EHyperTwistTrainingDeliveryMode GeneratedPlanSuggestedMode =
		EHyperTwistTrainingDeliveryMode::Timer;
	EHyperTwistTrainingSelectionPolicy GeneratedPlanSuggestedSelectionPolicy =
		EHyperTwistTrainingSelectionPolicy::Weighted;
	FString GeneratedPlanPostureLabel;
	int32 MethodDrillRecoveryHistoryCount = 0;
	int32 StrongMethodDrillRecoveryHistoryCount = 0;
	int32 WeakMethodDrillRecoveryHistoryCount = 0;
	int32 NarrowMethodDrillPacketStructureRecoveryLaunchCount = 0;
	int32 NarrowMethodDrillPacketStructureRecoveryLaunchReducedCount = 0;
	int32 BroadMethodDrillPacketStructureRecoveryPromoteCount = 0;
	int32 BroadMethodDrillPacketStructureRecoveryPromoteReducedCount = 0;
	int32 TrustedTightMethodDrillRecoveryStructurePlanHistoryCount = 0;
	int32 TrustedBroadMethodDrillRecoveryStructurePlanHistoryCount = 0;
	float TrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore = 0.0f;
	float TrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore = 0.0f;
	int32 ReliableTrustedTightMethodDrillRecoveryStructurePlanHistoryCount = 0;
	int32 ReliableTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount = 0;
	float ReliableTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore = 0.0f;
	float ReliableTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore = 0.0f;
	int32 ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanHistoryCount = 0;
	int32 ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount = 0;
	float ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore = 0.0f;
	float ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore = 0.0f;
	int32 ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanOutcomeHistoryCount = 0;
	int32 ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanOutcomeHistoryCount = 0;
	float ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanOutcomeAverageScore = 0.0f;
	float ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanOutcomeAverageScore = 0.0f;
	float MethodDrillRecoveryAverageOutcomeScore = 0.0f;
	bool bStrongPressureDominant = false;
	bool bWeakPressureDominant = false;
	bool bNarrowPacketStructureRecoveryDominant = false;
	bool bBroadPacketStructureRecoveryDominant = false;
	bool bReliableTrustedTightStructurePlanDominant = false;
	bool bReliableTrustedBroadStructurePlanDominant = false;
	bool bReliableAlignedTrustedTightStructurePlanDominant = false;
	bool bReliableAlignedTrustedBroadStructurePlanDominant = false;
	bool bReliableAlignedTrustedTightStructurePlanOutcomeDominant = false;
	bool bReliableAlignedTrustedBroadStructurePlanOutcomeDominant = false;
	bool bGeneratedPacketUsedStrongRetainedMethodDrillRecoveryPosture = false;
	bool bGeneratedPacketUsedWeakRetainedMethodDrillRecoveryPosture = false;
	bool bGeneratedPacketUsedGenericMethodDrillRecoveryMemory = false;
	bool bGeneratedPlanUsedTightStructureContinuationPosture = false;
	bool bGeneratedPlanUsedBroadStructureRedirectPosture = false;
	bool bGeneratedPlanUsedReliableTrustedTightStructureContinuationPosture = false;
	bool bGeneratedPlanUsedReliableTrustedBroadStructureRedirectPosture = false;
	bool bGeneratedPlanUsedReliableAlignedTrustedTightStructureContinuationPosture = false;
	bool bGeneratedPlanUsedReliableAlignedTrustedBroadStructureRedirectPosture = false;
	bool bUsedMethodDrillRecoveryMemoryForRecovery = false;
	bool bUsedMethodDrillRecoveryMemoryForHandoff = false;

	bool IsStructurallyValid() const
	{
		return !RecordedAtUtc.IsEmpty()
			&& MethodDrillRecoveryHistoryCount > 0
			&& (!QueueRecoveryStatusLine.IsEmpty() || !HandoffRecommendationStatusLine.IsEmpty());
	}
};

struct FHyperTwistCoachDashboardMethodDrillFollowUpWeighting
{
	int32 MatchingHistoryCount = 0;
	int32 UpstreamPacketStructureHistoryCount = 0;
	int32 UpstreamNarrowPacketStructureHistoryCount = 0;
	int32 UpstreamBroadPacketStructureHistoryCount = 0;
	int32 StrongOutcomeCount = 0;
	int32 WeakOutcomeCount = 0;
	int32 ContinueNarrowBias = 0;
	int32 RedirectCoachBias = 0;
	int32 StrongPacketContinuationCount = 0;
	int32 WeakPacketRedirectCount = 0;
	int32 QueueEntryFirstStructureCount = 0;
	int32 FollowUpPacketFirstStructureCount = 0;
	int32 RecommendedBriefFirstStructureCount = 0;
	int32 RecommendedRedirectStructureCount = 0;
	float AverageSuccessRate = 0.0f;
	float AverageMistakes = 0.0f;
	float UpstreamNarrowPacketStructureAverageOutcomeScore = 0.0f;
	float UpstreamBroadPacketStructureAverageOutcomeScore = 0.0f;
	bool bPreferDrillFollowUp = false;
	bool bPreferCoachHandoff = false;
	bool bHasUpstreamStructureSignal = false;
	bool bUsedUpstreamNarrowStructureSignal = false;
	bool bUsedUpstreamBroadStructureSignal = false;

	bool IsStructurallyValid() const
	{
		return MatchingHistoryCount > 0 || UpstreamPacketStructureHistoryCount > 0;
	}
};

UCLASS(BlueprintType, Blueprintable)
class UNREALHYPERTWIST_API UHyperTwistCoachDashboardWidget : public UHyperTwistTrainingPanelWidget
{
	GENERATED_BODY()

public:
	virtual void NativeConstruct() override;
	virtual void NativeTick(const FGeometry& MyGeometry, float InDeltaTime) override;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist|Training|Coach|Dashboard")
	int32 DefaultDeferredHours = 24;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist|Training|Coach|Dashboard")
	int32 DefaultSuccessAttemptTimeMs = 15000;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist|Training|Coach|Dashboard")
	int32 DefaultFailureAttemptTimeMs = 30000;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist|Training|Coach|Dashboard")
	int32 DefaultTimeoutAttemptTimeMs = 45000;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist|Training|Coach|Dashboard")
	int32 DefaultDnfAttemptTimeMs = 60000;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist|Training|Coach|Dashboard")
	bool bPreferActiveQueueSelectionOnRefresh = true;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist|Training|Coach|Dashboard")
	bool bRefreshLiveAttemptClockOnTick = true;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist|Training|Coach|Dashboard")
	bool bPreferLatestAttemptSelectionOnRefresh = true;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training|Coach|Dashboard")
	int32 SelectedQueueEntryIndex = INDEX_NONE;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training|Coach|Dashboard")
	int32 SelectedAttemptIndex = INDEX_NONE;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training|Coach|Dashboard")
	int32 SelectedGuidanceDecisionIndex = INDEX_NONE;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training|Coach|Dashboard")
	int32 SelectedHandoffHistoryIndex = INDEX_NONE;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training|Coach|Dashboard")
	int32 SelectedTemplateLaunchHistoryIndex = INDEX_NONE;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training|Coach|Dashboard")
	int32 SelectedQueueSuppressionIndex = INDEX_NONE;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training|Coach|Dashboard")
	int32 SelectedClosureRecoveryIndex = INDEX_NONE;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training|Coach|Dashboard")
	int32 SelectedMethodDrillFollowUpHistoryIndex = INDEX_NONE;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training|Coach|Dashboard")
	int32 SelectedMethodDrillRecoveryOutcomeIndex = INDEX_NONE;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training|Coach|Dashboard")
	int32 SelectedMethodDrillRecoveryMemoryHistoryIndex = INDEX_NONE;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training|Coach|Dashboard")
	bool bHasLiveAttemptTimer = false;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training|Coach|Dashboard")
	int32 LiveAttemptInspectionElapsedMs = 0;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training|Coach|Dashboard")
	int32 LiveAttemptSolveElapsedMs = 0;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training|Coach|Dashboard")
	int32 LiveAttemptDisplayedMs = 0;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training|Coach|Dashboard")
	TArray<FHyperTwistTrainingSplitCapture> LiveAttemptSplitCaptures;

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach|Dashboard")
	void RefreshCoachDashboardView();

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingRunState ExecutePrimaryCoachAction();

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach|Dashboard")
	bool DeferDisplayedQueueEntryByDefaultWindow();

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach|Dashboard")
	bool PromoteFirstDeferredQueueEntry(const FString& StartActionSourceLabel);

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach|Dashboard")
	bool ApplyQueueRecoveryPosture();

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach|Dashboard")
	bool SelectPreviousQueueEntry();

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach|Dashboard")
	bool SelectNextQueueEntry();

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingRunState StartSelectedQueueEntry();

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach|Dashboard")
	bool SelectPreviousAttemptReview();

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach|Dashboard")
	bool SelectNextAttemptReview();

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingDeck PreviewRecommendedCoachDeck();

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingDeck PreviewFollowUpCoachDeck();

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingRunState StartPreferredActiveSessionTemplateRun();

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach|Dashboard")
	bool SelectPreviousGuidancePreviewCase();

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach|Dashboard")
	bool SelectNextGuidancePreviewCase();

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingRunState StartActiveGuidancePreviewDeckRun();

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingRunState StartSelectedGuidancePreviewCaseRun();

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingRunState RestartRetainedRunRecapDeck();

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach|Dashboard")
	void ClearRetainedRunRecap();

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingRunStepResult SubmitSyntheticCurrentAttempt(
		EHyperTwistTrainingAttemptResult Result,
		int32 TimeMs
	);

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach|Dashboard")
	bool ContinueCurrentRunFlow();

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach|Dashboard")
	bool ApplyGuidanceOutcomeAction();

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach|Dashboard")
	bool SelectPreviousGuidanceDecisionHistoryEntry();

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach|Dashboard")
	bool SelectNextGuidanceDecisionHistoryEntry();

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach|Dashboard")
	bool SelectPreviousHandoffHistoryEntry();

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach|Dashboard")
	bool SelectNextHandoffHistoryEntry();

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach|Dashboard")
	bool SelectPreviousTemplateLaunchHistoryEntry();

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach|Dashboard")
	bool SelectNextTemplateLaunchHistoryEntry();

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach|Dashboard")
	bool SelectPreviousQueueSuppressionHistoryEntry();

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach|Dashboard")
	bool SelectNextQueueSuppressionHistoryEntry();

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach|Dashboard")
	bool SelectPreviousClosureRecoveryHistoryEntry();

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach|Dashboard")
	bool SelectNextClosureRecoveryHistoryEntry();

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardQueueRecoveryStatusInspectSurface
	GetDisplayedQueueRecoveryStatusInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardQueueRecoveryDetailInspectSurface
	GetDisplayedQueueRecoveryDetailInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardQueueSuppressionSummaryInspectSurface
	GetDisplayedQueueSuppressionSummaryInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardQueueSuppressionDetailInspectSurface
	GetDisplayedQueueSuppressionDetailInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardQueueRecoveryOutcomeInspectSurface
	GetDisplayedQueueRecoveryOutcomeInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardQueueSuppressionHistoryInspectSurface
	GetSelectedQueueSuppressionHistoryInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardQueueSuppressionHistoryNavigationInspectSurface
	GetDisplayedQueueSuppressionHistoryNavigationInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardQueueSuppressionBandInspectSurface
	GetDisplayedQueueSuppressionBandInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardClosureRecoveryHistoryInspectSurface
	GetSelectedClosureRecoveryHistoryInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardClosureRecoveryHistoryNavigationInspectSurface
	GetDisplayedClosureRecoveryHistoryNavigationInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardMethodDrillRecoveryOutcomeHistoryInspectSurface
	GetSelectedMethodDrillRecoveryOutcomeHistoryInspectSurface() const;

  UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardMethodDrillRecoveryOutcomeHistoryStatusInspectSurface
	GetDisplayedMethodDrillRecoveryOutcomeHistoryStatusInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardMethodDrillRecoveryOutcomeHistoryDetailInspectSurface
	GetDisplayedMethodDrillRecoveryOutcomeHistoryDetailInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardMethodDrillRecoveryOutcomeHistoryNavigationInspectSurface
	GetDisplayedMethodDrillRecoveryOutcomeHistoryNavigationInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardMethodDrillRecoveryOutcomeHistoryBandInspectSurface
	GetDisplayedMethodDrillRecoveryOutcomeHistoryBandInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardMethodDrillRecoveryMemoryHistoryInspectSurface
	GetSelectedMethodDrillRecoveryMemoryHistoryInspectSurface() const;

  UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardMethodDrillRecoveryMemoryHistoryStatusInspectSurface
	GetDisplayedMethodDrillRecoveryMemoryHistoryStatusInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardMethodDrillRecoveryMemoryHistoryDetailInspectSurface
	GetDisplayedMethodDrillRecoveryMemoryHistoryDetailInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardMethodDrillRecoveryMemoryHistoryNavigationInspectSurface
	GetDisplayedMethodDrillRecoveryMemoryHistoryNavigationInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardMethodDrillRecoveryMemoryHistoryBandInspectSurface
	GetDisplayedMethodDrillRecoveryMemoryHistoryBandInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardMethodDrillFollowUpHistoryInspectSurface
	GetSelectedMethodDrillFollowUpHistoryInspectSurface() const;

  UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardMethodDrillFollowUpHistoryStatusInspectSurface
	GetDisplayedMethodDrillFollowUpHistoryStatusInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardMethodDrillFollowUpHistoryDetailInspectSurface
	GetDisplayedMethodDrillFollowUpHistoryDetailInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardMethodDrillFollowUpHistoryNavigationInspectSurface
	GetDisplayedMethodDrillFollowUpHistoryNavigationInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardMethodDrillFollowUpHistoryBandInspectSurface
	GetDisplayedMethodDrillFollowUpHistoryBandInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardHandoffHistoryInspectSurface
	GetSelectedHandoffHistoryInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardHandoffHistoryStatusInspectSurface
	GetDisplayedHandoffHistoryStatusInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardHandoffHistoryDetailInspectSurface
	GetDisplayedHandoffHistoryDetailInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardHandoffHistoryNavigationInspectSurface
	GetDisplayedHandoffHistoryNavigationInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardHandoffHistoryBandInspectSurface
	GetDisplayedHandoffHistoryBandInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardGuidanceDecisionHistoryInspectSurface
	GetSelectedGuidanceDecisionHistoryInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardGuidanceDecisionHistoryStatusInspectSurface
	GetDisplayedGuidanceDecisionHistoryStatusInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardGuidanceDecisionHistoryDetailInspectSurface
	GetDisplayedGuidanceDecisionHistoryDetailInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardGuidanceDecisionHistoryNavigationInspectSurface
	GetDisplayedGuidanceDecisionHistoryNavigationInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardGuidanceDecisionHistoryBandInspectSurface
	GetDisplayedGuidanceDecisionHistoryBandInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardTemplateLaunchHistoryInspectSurface
	GetSelectedTemplateLaunchHistoryInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardTemplateLaunchHistoryStatusInspectSurface
	GetDisplayedTemplateLaunchHistoryStatusInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardTemplateLaunchHistoryDetailInspectSurface
	GetDisplayedTemplateLaunchHistoryDetailInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardTemplateLaunchHistoryNavigationInspectSurface
	GetDisplayedTemplateLaunchHistoryNavigationInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardTemplateLaunchHistoryBandInspectSurface
	GetDisplayedTemplateLaunchHistoryBandInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardGuidanceComparisonInspectSurface
	GetDisplayedGuidanceComparisonInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardGuidanceOutcomeInspectSurface
	GetDisplayedGuidanceOutcomeInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardGuidanceDecisionWeightingInspectSurface
	GetDisplayedGuidanceDecisionWeightingInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardGuidancePreviewSelectionInspectSurface
	GetDisplayedGuidancePreviewSelectionInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardGuidancePreviewCaseDetailInspectSurface
	GetDisplayedGuidancePreviewCaseDetailInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardGuidancePreviewCaseNavigationInspectSurface
	GetDisplayedGuidancePreviewCaseNavigationInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardGuidancePreviewLaunchActionControlInspectSurface
	GetDisplayedGuidancePreviewLaunchActionControlInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardGuidancePreviewBandInspectSurface
	GetDisplayedGuidancePreviewBandInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardMethodDrillDiagnosticsInspectSurface
	GetDisplayedMethodDrillDiagnosticsInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardMethodDrillFollowUpActionInspectSurface
	GetDisplayedMethodDrillFollowUpActionInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardMethodDrillOperationalBandInspectSurface
	GetDisplayedMethodDrillOperationalBandInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardGuidanceRationaleInspectSurface
	GetDisplayedGuidanceRationaleInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardGuidancePreferenceInspectSurface
	GetDisplayedGuidancePreferenceInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardGuidanceReasoningBandInspectSurface
	GetDisplayedGuidanceReasoningBandInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardGuidanceDeckPreviewInspectSurface
	GetDisplayedRecommendedGuidanceDeckPreviewInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardGuidanceDeckPreviewInspectSurface
	GetDisplayedFollowUpGuidanceDeckPreviewInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardHandoffRecommendationInspectSurface
	GetDisplayedCoachHandoffRecommendationInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardHandoffStatusInspectSurface
	GetDisplayedCoachHandoffStatusInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardTransitionStatusInspectSurface
	GetDisplayedTransitionStatusInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardRunActionLabelsInspectSurface
	GetDisplayedRunActionLabelsInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardHandoffTransitionBandInspectSurface
	GetDisplayedHandoffTransitionBandInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardActiveRunStatusInspectSurface
	GetDisplayedActiveRunStatusInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardRunRecapStatusInspectSurface
	GetDisplayedRunRecapStatusInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardRunRecapDetailInspectSurface
	GetDisplayedRunRecapDetailInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardRunRecapActionControlInspectSurface
	GetDisplayedRunRecapActionControlInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardRunStateRecapBandInspectSurface
	GetDisplayedRunStateRecapBandInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardTemplateLaunchStatusInspectSurface
	GetDisplayedTemplateLaunchStatusInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardTemplateLaunchDetailInspectSurface
	GetDisplayedTemplateLaunchDetailInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardPreferredTemplateLaunchActionInspectSurface
	GetDisplayedPreferredTemplateLaunchActionInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardGuidancePreviewActionInspectSurface
	GetDisplayedRecommendedPreviewActionInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardGuidancePreviewActionInspectSurface
	GetDisplayedFollowUpPreviewActionInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardTemplateLaunchPreviewActionControlBandInspectSurface
	GetDisplayedTemplateLaunchPreviewActionControlBandInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardActiveAttemptTimerStatusInspectSurface
	GetDisplayedActiveAttemptTimerStatusInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardCurrentCaseDeckStatusInspectSurface
	GetDisplayedCurrentCaseDeckStatusInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardAttemptTimeInputHintInspectSurface
	GetDisplayedAttemptTimeInputHintInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardLiveTimerSplitControlLabelInspectSurface
	GetDisplayedLiveTimerSplitControlLabelInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardAttemptResultActionEnablementInspectSurface
	GetDisplayedAttemptResultActionEnablementInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardAttemptReviewNavigationInspectSurface
	GetDisplayedAttemptReviewNavigationInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardRunControlEnablementInspectSurface
	GetDisplayedRunControlEnablementInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardQueueActionEnablementInspectSurface
	GetDisplayedQueueActionEnablementInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardExecutionActionControlBandInspectSurface
	GetDisplayedExecutionActionControlBandInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardCurrentCaseTimerBandInspectSurface
	GetDisplayedCurrentCaseTimerBandInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardVerificationActionInspectSurface
	GetDisplayedVerificationActionInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardRepositoryVerificationStatusInspectSurface
	GetDisplayedRepositoryVerificationStatusInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardRecognitionStatusInspectSurface
	GetDisplayedRecognitionStatusInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardReviewPolicyStatusInspectSurface
	GetDisplayedReviewPolicyStatusInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardVerificationRecognitionPolicyBandInspectSurface
	GetDisplayedVerificationRecognitionPolicyBandInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardSelectedQueueNavigationInspectSurface
	GetDisplayedSelectedQueueNavigationInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardStartSelectedQueueActionInspectSurface
	GetDisplayedStartSelectedQueueActionInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardQueueCountsStatusInspectSurface
	GetDisplayedQueueCountsStatusInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardSelectedQueueSummaryInspectSurface
	GetDisplayedSelectedQueueSummaryInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardSelectedQueueEntryDetailInspectSurface
	GetDisplayedSelectedQueueEntryDetailInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardSelectedQueueBandInspectSurface
	GetDisplayedSelectedQueueBandInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardScheduleHorizonStatusInspectSurface
	GetDisplayedScheduleHorizonStatusInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardSchedulePolicyFrictionInspectSurface
	GetDisplayedSchedulePolicyFrictionInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardQueueSchedulingRecoveryBandInspectSurface
	GetDisplayedQueueSchedulingRecoveryBandInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardClosureRecoveryStatusInspectSurface
	GetDisplayedClosureRecoveryStatusInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardClosureRecoveryDetailInspectSurface
	GetDisplayedClosureRecoveryDetailInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardClosureRecoveryBandInspectSurface
	GetDisplayedClosureRecoveryBandInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardLastAttemptReviewSummaryInspectSurface
	GetDisplayedLastAttemptReviewSummaryInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardLastAttemptTimingDerivedPhaseReviewInspectSurface
	GetDisplayedLastAttemptTimingDerivedPhaseReviewInspectSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingCoachDashboardLiveSplitCaptureStatusInspectSurface
	GetDisplayedLiveSplitCaptureStatusInspectSurface() const;

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach|Dashboard")
	bool SelectPreviousMethodDrillFollowUpHistoryEntry();

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach|Dashboard")
	bool SelectNextMethodDrillFollowUpHistoryEntry();

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach|Dashboard")
	bool SelectPreviousMethodDrillRecoveryOutcomeEntry();

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach|Dashboard")
	bool SelectNextMethodDrillRecoveryOutcomeEntry();

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach|Dashboard")
	bool SelectPreviousMethodDrillRecoveryMemoryHistoryEntry();

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach|Dashboard")
	bool SelectNextMethodDrillRecoveryMemoryHistoryEntry();

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach|Dashboard")
	bool StartLiveAttemptTimer();

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach|Dashboard")
	bool AdvanceLiveAttemptToSolvePhase();

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach|Dashboard")
	void CancelLiveAttemptTimer();

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach|Dashboard")
	FHyperTwistTrainingRunStepResult SubmitLiveTimedAttempt(
		EHyperTwistTrainingAttemptResult Result
	);

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach|Dashboard")
	bool CaptureNextLiveAttemptSplit();

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach|Dashboard")
	bool UndoLastLiveAttemptSplit();

protected:
	UPROPERTY(Transient)
	TObjectPtr<UVerticalBox> RootLayout = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> HeadlineTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> SecondaryTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> FocusTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> ActiveRunHeaderTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> ActiveRunStatusTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> ActiveRunSummaryTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> RunRecapHeaderTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> RunRecapStatusTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> RunRecapDetailTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> GuidanceComparisonHeaderTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> GuidanceComparisonStatusTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> GuidanceComparisonDetailTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> GuidanceOutcomeHeaderTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> GuidanceOutcomeStatusTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> GuidanceOutcomeDetailTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> GuidanceOutcomeActionButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> GuidanceOutcomeActionButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> GuidanceDecisionWeightingHeaderTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> GuidanceDecisionWeightingStatusTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> GuidanceDecisionWeightingDetailTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> GuidancePreferenceHeaderTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> GuidancePreferenceStatusTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> GuidancePreferenceDetailTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> GuidanceDecisionHistoryHeaderTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> GuidanceDecisionHistoryStatusTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> GuidanceDecisionHistoryDetailTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> PreviousGuidanceDecisionButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> PreviousGuidanceDecisionButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> NextGuidanceDecisionButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> NextGuidanceDecisionButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> CoachHandoffHeaderTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> CoachHandoffStatusTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> CoachHandoffRecommendationHeaderTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> CoachHandoffRecommendationStatusTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> CoachHandoffRecommendationDetailTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> TemplateLaunchHeaderTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> TemplateLaunchStatusTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> TemplateLaunchDetailTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> TemplateLaunchHistoryHeaderTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> TemplateLaunchHistoryStatusTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> TemplateLaunchHistoryDetailTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> HandoffHistoryHeaderTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> HandoffHistoryStatusTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> HandoffHistoryDetailTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> PreviousHandoffHistoryButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> PreviousHandoffHistoryButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> NextHandoffHistoryButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> NextHandoffHistoryButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> PreviousTemplateLaunchHistoryButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> PreviousTemplateLaunchHistoryButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> NextTemplateLaunchHistoryButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> NextTemplateLaunchHistoryButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> GuidanceReviewHeaderTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> GuidanceRationaleHeaderTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> GuidanceRationaleStatusTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> GuidanceRationaleDetailTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> GuidancePreviewSelectionTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> RecommendedDeckPreviewTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> FollowUpDeckPreviewTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> GuidancePreviewCaseDetailTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> MethodDrillDiagnosticsHeaderTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> MethodDrillDiagnosticsStatusTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> MethodDrillDiagnosticsDetailTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> StartMethodDrillFollowUpButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> StartMethodDrillFollowUpButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> MethodDrillFollowUpHistoryHeaderTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> MethodDrillFollowUpHistoryStatusTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> MethodDrillFollowUpHistoryDetailTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> PreviousMethodDrillFollowUpHistoryButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> PreviousMethodDrillFollowUpHistoryButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> NextMethodDrillFollowUpHistoryButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> NextMethodDrillFollowUpHistoryButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> RepeatRunButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> RepeatRunButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> DismissRecapButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> DismissRecapButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> StartQueuedRunButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> StartQueuedRunButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> StartFollowUpRunButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> StartFollowUpRunButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> StartRecommendedRunButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> StartRecommendedRunButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> StartTemplateLaunchButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> StartTemplateLaunchButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> PreviewRecommendedButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> PreviewRecommendedButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> PreviewFollowUpButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> PreviewFollowUpButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> PreviousGuidanceCaseButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> PreviousGuidanceCaseButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> NextGuidanceCaseButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> NextGuidanceCaseButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> StartPreviewDeckButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> StartPreviewDeckButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> StartPreviewCaseButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> StartPreviewCaseButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> LastAttemptTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> LastAttemptTimingTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> LastAttemptPhaseTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> CurrentCaseHeaderTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> CurrentCasePromptTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> CurrentCaseNotationTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> TransitionHeaderTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> TransitionStatusTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> AttemptControlHeaderTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> AttemptInputStatusTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> TimerHeaderTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> TimerStatusTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> SplitHeaderTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> SplitStatusTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UEditableTextBox> AttemptTimeTextBox = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> QueueStatusTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> ScheduleHeaderTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> ScheduleStatusTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> SchedulePolicyTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> ClosureRecoveryHeaderTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> ClosureRecoveryStatusTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> ClosureRecoveryDetailTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> ClosureRecoveryHistoryHeaderTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> ClosureRecoveryHistoryStatusTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> ClosureRecoveryHistoryDetailTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> PreviousClosureRecoveryButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> PreviousClosureRecoveryButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> NextClosureRecoveryButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> NextClosureRecoveryButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> QueueRecoveryHeaderTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> QueueRecoveryStatusTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> QueueRecoveryDetailTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> QueueRecoveryOutcomeHeaderTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> QueueRecoveryOutcomeStatusTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> QueueRecoveryOutcomeDetailTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> MethodDrillRecoveryHistoryHeaderTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> MethodDrillRecoveryHistoryStatusTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> MethodDrillRecoveryHistoryDetailTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> PreviousMethodDrillRecoveryHistoryButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> PreviousMethodDrillRecoveryHistoryButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> NextMethodDrillRecoveryHistoryButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> NextMethodDrillRecoveryHistoryButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> MethodDrillRecoveryMemoryHistoryHeaderTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> MethodDrillRecoveryMemoryHistoryStatusTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> MethodDrillRecoveryMemoryHistoryDetailTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> PreviousMethodDrillRecoveryMemoryHistoryButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> PreviousMethodDrillRecoveryMemoryHistoryButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> NextMethodDrillRecoveryMemoryHistoryButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> NextMethodDrillRecoveryMemoryHistoryButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> QueueSuppressionHistoryHeaderTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> QueueSuppressionHistoryStatusTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> QueueSuppressionHistoryDetailTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> PreviousQueueSuppressionButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> PreviousQueueSuppressionButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> NextQueueSuppressionButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> NextQueueSuppressionButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> RecognitionStatusTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> RecognitionDetailTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> ReviewPolicyStatusTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> ReviewPolicyDetailTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> VerificationStatusTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> VerificationHeaderTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> VerificationDetailTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> QueueCountsTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> FollowUpTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> QueueSelectionTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> QueueEntryDetailTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> QueueExecutionTextBlock = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> PrimaryActionButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> PrimaryActionButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> VerifyButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> VerifyButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> DeferButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> DeferButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> PromoteButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> PromoteButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> QueueRecoveryActionButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> QueueRecoveryActionButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> CompleteRunButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> CompleteRunButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> ContinueRunButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> ContinueRunButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> ClearRunButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> ClearRunButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> RecordSuccessButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> RecordSuccessButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> RecordFailureButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> RecordFailureButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> RecordTimeoutButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> RecordTimeoutButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> RecordDnfButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> RecordDnfButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> UseTargetTimeButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> UseTargetTimeButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> UseAverageTimeButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> UseAverageTimeButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> StartTimerButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> StartTimerButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> CancelTimerButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> CancelTimerButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> CaptureSplitButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> CaptureSplitButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> UndoSplitButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> UndoSplitButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> PreviousQueueButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> PreviousQueueButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> PreviousAttemptButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> PreviousAttemptButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> StartSelectedButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> StartSelectedButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> NextAttemptButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> NextAttemptButtonLabel = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UButton> NextQueueButton = nullptr;

	UPROPERTY(Transient)
	TObjectPtr<UTextBlock> NextQueueButtonLabel = nullptr;

	UFUNCTION()
	void HandlePrimaryActionClicked();

	UFUNCTION()
	void HandleVerifyClicked();

	UFUNCTION()
	void HandleDeferClicked();

	UFUNCTION()
	void HandlePromoteClicked();

	UFUNCTION()
	void HandleApplyQueueRecoveryClicked();

	UFUNCTION()
	void HandleRepeatRunClicked();

	UFUNCTION()
	void HandleDismissRecapClicked();

	UFUNCTION()
	void HandleStartQueuedRunClicked();

	UFUNCTION()
	void HandleStartFollowUpRunClicked();

	UFUNCTION()
	void HandleStartRecommendedRunClicked();

	UFUNCTION()
	void HandleStartTemplateLaunchClicked();

	UFUNCTION()
	void HandlePreviewRecommendedClicked();

	UFUNCTION()
	void HandlePreviewFollowUpClicked();

	UFUNCTION()
	void HandlePreviousGuidanceCaseClicked();

	UFUNCTION()
	void HandleNextGuidanceCaseClicked();

	UFUNCTION()
	void HandleStartPreviewDeckClicked();

	UFUNCTION()
	void HandleStartPreviewCaseClicked();

	UFUNCTION()
	void HandleStartMethodDrillFollowUpClicked();

	UFUNCTION()
	void HandleCompleteRunClicked();

	UFUNCTION()
	void HandleContinueRunClicked();

	UFUNCTION()
	void HandleGuidanceOutcomeActionClicked();

	UFUNCTION()
	void HandlePreviousGuidanceDecisionClicked();

	UFUNCTION()
	void HandleNextGuidanceDecisionClicked();

	UFUNCTION()
	void HandlePreviousHandoffHistoryClicked();

	UFUNCTION()
	void HandleNextHandoffHistoryClicked();

	UFUNCTION()
	void HandlePreviousTemplateLaunchHistoryClicked();

	UFUNCTION()
	void HandleNextTemplateLaunchHistoryClicked();

	UFUNCTION()
	void HandlePreviousQueueSuppressionClicked();

	UFUNCTION()
	void HandleNextQueueSuppressionClicked();

	UFUNCTION()
	void HandlePreviousClosureRecoveryClicked();

	UFUNCTION()
	void HandleNextClosureRecoveryClicked();

	UFUNCTION()
	void HandlePreviousMethodDrillFollowUpHistoryClicked();

	UFUNCTION()
	void HandleNextMethodDrillFollowUpHistoryClicked();

	UFUNCTION()
	void HandlePreviousMethodDrillRecoveryHistoryClicked();

	UFUNCTION()
	void HandleNextMethodDrillRecoveryHistoryClicked();

	UFUNCTION()
	void HandlePreviousMethodDrillRecoveryMemoryHistoryClicked();

	UFUNCTION()
	void HandleNextMethodDrillRecoveryMemoryHistoryClicked();

	UFUNCTION()
	void HandleClearRunClicked();

	UFUNCTION()
	void HandleRecordSuccessClicked();

	UFUNCTION()
	void HandleRecordFailureClicked();

	UFUNCTION()
	void HandleRecordTimeoutClicked();

	UFUNCTION()
	void HandleRecordDnfClicked();

	UFUNCTION()
	void HandleUseTargetTimeClicked();

	UFUNCTION()
	void HandleUseAverageTimeClicked();

	UFUNCTION()
	void HandleStartTimerClicked();

	UFUNCTION()
	void HandleCancelTimerClicked();

	UFUNCTION()
	void HandleCaptureSplitClicked();

	UFUNCTION()
	void HandleUndoSplitClicked();

	UFUNCTION()
	void HandlePreviousQueueClicked();

	UFUNCTION()
	void HandlePreviousAttemptClicked();

	UFUNCTION()
	void HandleStartSelectedClicked();

	UFUNCTION()
	void HandleNextAttemptClicked();

	UFUNCTION()
	void HandleNextQueueClicked();

private:
	void EnsureDefaultDashboardBuilt();
	void SyncSelectedQueueEntry();
	void SyncSelectedAttempt();
	void SyncRetainedRunRecap();
	void SyncSelectedGuidancePreviewCase();
	void SyncSelectedGuidanceDecisionHistoryEntry();
	void SyncSelectedHandoffHistoryEntry();
	void SyncSelectedTemplateLaunchHistoryEntry();
	void SyncSelectedQueueSuppressionHistoryEntry();
	void SyncSelectedClosureRecoveryHistoryEntry();
	void SyncSelectedMethodDrillFollowUpHistoryEntry();
	void SyncSelectedMethodDrillRecoveryOutcomeEntry();
	void SyncSelectedMethodDrillRecoveryMemoryHistoryEntry();
	void SyncPreferredGuidancePreviewLane(bool bForceAdoptPreferredLane);
	void UpdateDashboardPresentation();
	void RefreshLiveAttemptClock();
	void SyncLiveAttemptStateFromSubsystem();
	FString BuildDefaultDeferredUntilUtc() const;
	FString FindFirstDeferredQueueEntryId() const;
	bool TryParseAttemptTimeOverride(int32& OutTimeMs) const;
	int32 ResolveAttemptTimeMs(EHyperTwistTrainingAttemptResult Result) const;
	void SetAttemptTimeText(int32 TimeMs);
	const FHyperTwistTrainingCoachSessionQueueStateEntry* FindSelectedQueueEntry() const;
	const FHyperTwistTrainingTimingPolicy* FindActiveTimingPolicy() const;
	const FHyperTwistTrainingDeck* GetActiveGuidancePreviewDeck() const;
	const FHyperTwistCoachBrief* GetActiveGuidancePreviewBrief() const;
	const FHyperTwistTrainingTemplateLaunchScopedStats* FindCachedTemplateLaunchScopedStats(
		const FString& TemplateId,
		const FString& UserId
	) const;
	const FHyperTwistTrainingSessionTemplate* FindPreferredDashboardTemplateLaunch(
		FHyperTwistTrainingTemplateLaunchSelectionProvenance* OutSelectionProvenance = nullptr
	) const;
	FString ResolveDashboardHandoffStartActionSourceLabel(
		EHyperTwistTrainingCoachHandoffKind HandoffKind) const;
	FHyperTwistTrainingDeck BuildSelectedGuidancePreviewCaseDeck() const;
	bool ResolveDisplayedGuidanceComparisonContext(
		const FHyperTwistTrainingSessionSummary*& OutDisplayedRunRecap,
		const FHyperTwistCoachBrief*& OutDisplayedGuidanceComparisonBrief,
		const FHyperTwistTrainingDeck*& OutDisplayedGuidanceComparisonDeck,
		FString& OutDisplayedGuidanceComparisonSelectedCaseId,
		bool& bOutDisplayedGuidanceComparisonSingleCase
	) const;
	bool IsCoachLoopActionabilityClosed() const;
	EHyperTwistCoachDashboardOutcomeAction DeriveGuidanceOutcomeAction() const;
	FHyperTwistCoachDashboardDecisionWeighting BuildGuidanceDecisionWeighting(
		EHyperTwistCoachDashboardOutcomeAction BaseAction
	) const;
	FHyperTwistCoachDashboardGuidanceLanePreference BuildGuidanceLanePreference() const;
	FHyperTwistCoachDashboardQueueRecoveryWeighting BuildQueueRecoveryWeighting() const;
	FHyperTwistCoachDashboardMethodDrillFollowUpWeighting BuildMethodDrillFollowUpWeighting() const;
	FString BuildGuidanceOutcomeActionLabel(EHyperTwistCoachDashboardOutcomeAction Action) const;
	FHyperTwistTrainingDeck BuildGuidanceOutcomeSelectedCaseDeck() const;
	void RecordQueueRecoveryOutcome(
		const FString& SourceLabel,
		const FString& AppliedActionLabel,
		FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind ActionKind,
		float BeforePressureScore,
		int32 BeforeDeferredEventCount,
		bool bBeforeBlockedFollowUp,
		bool bBeforeOutstandingDeferred,
		bool bBeforeCompletionGap,
		bool bUsedDeferredFirstSuppressionSignal,
		bool bUsedMethodDrillHandoffSignal,
		bool bUsedNarrowMethodDrillPacketStructureRecovery,
		bool bUsedBroadMethodDrillPacketStructureRecovery,
		bool bUsedStrongRetainedMethodDrillRecoveryPosture,
		bool bUsedWeakRetainedMethodDrillRecoveryPosture,
		bool bUsedReliableTrustedTightStructurePlanRecovery,
		bool bUsedReliableTrustedBroadStructurePlanRecovery,
		bool bUsedReliableAlignedTrustedTightStructurePlanRecovery,
		bool bUsedReliableAlignedTrustedBroadStructurePlanRecovery,
		bool bSucceeded
	);
	void RecordCoachHandoffHistorySnapshot(
		const FString& RecommendedHandoffKindLabel,
		const FString& RecommendationStatusLine,
		const FString& RecommendationDetailLine,
		const FString& QueueSourceLabel,
		int32 ClosureContinuationBias,
		int32 ClosureSuppressionBias,
		bool bQueueReady,
		bool bFollowUpReady,
		bool bRecommendedReady,
		bool bUsedDeferredFirstSuppressionSignal,
		bool bUsedMethodDrillWeighting,
		bool bUsedStrongRetainedMethodDrillRecoveryPosture,
		bool bUsedWeakRetainedMethodDrillRecoveryPosture,
		bool bUsedReliableTrustedTightStructurePlanHistory,
		bool bUsedReliableTrustedBroadStructurePlanHistory,
		bool bUsedReliableAlignedTrustedTightStructurePlanHistory,
		bool bUsedReliableAlignedTrustedBroadStructurePlanHistory,
		bool bUsedReliableAlignedTrustedTightStructurePlanOutcomeHistory,
		bool bUsedReliableAlignedTrustedBroadStructurePlanOutcomeHistory,
		bool bUsedReliableAcceptedAlignedTightPacketOutcomeHistory,
		bool bUsedReliableAcceptedAlignedBroadPacketOutcomeHistory
	);
	void RecordQueueSuppressionSnapshot();
	void RecordClosureRecoverySnapshot();
	void SyncTemplateLaunchHistoryFromRepository();
	void RecordMethodDrillFollowUpHistoryEntry(const FHyperTwistTrainingSessionSummary& CompletedRunRecap);
	void RecordMethodDrillRecoveryMemoryHistorySnapshot(
		const FHyperTwistCoachDashboardQueueRecoveryWeighting& QueueRecoveryWeighting,
		const FString& QueueRecoveryStatusLine,
		const FString& HandoffRecommendationKindLabel,
		const FString& HandoffRecommendationStatusLine,
		bool bUsedMethodDrillRecoveryMemoryForHandoff,
		bool bSuppressGeneratedGuidancePacketSurface
	);
	void RecordGuidanceOutcomeDecision(
		EHyperTwistCoachDashboardOutcomeAction RecommendedAction,
		EHyperTwistCoachDashboardOutcomeAction AppliedAction,
		const FHyperTwistTrainingSessionSummary& DisplayedRunRecap,
		const FHyperTwistCoachBrief& DisplayedGuidanceComparisonBrief,
		const FHyperTwistTrainingDeck& DisplayedGuidanceComparisonDeck,
		const FString& DisplayedGuidanceComparisonSelectedCaseId,
		bool bDisplayedGuidanceComparisonSingleCase,
		int32 LaunchedCaseCount,
		const FString& LaunchBudgetReasonLine
	);
	void CaptureActiveGuidanceLaunchContext(
		const FString& SessionId,
		const FHyperTwistTrainingDeck& Deck,
		bool bSingleCaseLaunch,
		const FString& SelectedCaseId
	);
	void CaptureActiveTemplateLaunchContext(
		const FString& SessionId,
		const FHyperTwistTrainingTemplateLaunchProvenance& TemplateLaunchProvenance
	);
	void CaptureActiveMethodDrillFollowUpLaunchContext(const FString& SessionId);
	bool IsLiveAttemptInspectionPhase() const;
	int32 GetMaxManualSplitCaptureCount() const;
	const FHyperTwistTrainingSplitPhaseDefinition* FindNextSplitPhaseToCapture() const;

	EHyperTwistCoachDashboardAttemptPhase LiveAttemptPhase = EHyperTwistCoachDashboardAttemptPhase::Idle;
	int32 LastObservedAttemptCount = INDEX_NONE;
	bool bHasRetainedRunRecap = false;
	FHyperTwistTrainingSessionSummary RetainedRunRecapSummary;
	FHyperTwistTrainingDeck RetainedRunRecapDeck;
	FString RetainedRunRecapUserId;
	FString RetainedRunRecapSessionId;
	EHyperTwistTrainingDeliveryMode RetainedRunRecapMode = EHyperTwistTrainingDeliveryMode::Timer;
	FString ActiveTemplateLaunchSessionId;
	FHyperTwistTrainingTemplateLaunchProvenance ActiveTemplateLaunchProvenance;
	bool bHasRetainedTemplateLaunch = false;
	FString RetainedTemplateLaunchSessionId;
	FHyperTwistTrainingTemplateLaunchProvenance RetainedTemplateLaunchProvenance;
	FString ActiveGuidanceLaunchSessionId;
	EHyperTwistCoachDashboardGuidancePreviewLane ActiveGuidanceLaunchLane =
		EHyperTwistCoachDashboardGuidancePreviewLane::None;
	bool bActiveGuidanceLaunchSingleCase = false;
	FHyperTwistCoachBrief ActiveGuidanceLaunchBrief;
	FHyperTwistTrainingDeck ActiveGuidanceLaunchDeck;
	FString ActiveGuidanceLaunchSelectedCaseId;
	FString ActiveMethodDrillFollowUpLaunchSessionId;
	FHyperTwistTrainingMethodDrillDiagnosticPacket ActiveMethodDrillFollowUpLaunchDiagnosticPacket;
	FHyperTwistTrainingSessionTemplate ActiveMethodDrillFollowUpLaunchTemplate;
	FString ActiveMethodDrillFollowUpLaunchPacketStructureLabel;
	FString ActiveMethodDrillFollowUpLaunchPacketLaneLabel;
	FString ActiveMethodDrillFollowUpLaunchPacketStanceLabel;
	bool bHasRetainedGuidanceComparison = false;
	FString RetainedGuidanceComparisonSessionId;
	EHyperTwistCoachDashboardGuidancePreviewLane RetainedGuidanceComparisonLane =
		EHyperTwistCoachDashboardGuidancePreviewLane::None;
	bool bRetainedGuidanceComparisonSingleCase = false;
	FHyperTwistCoachBrief RetainedGuidanceComparisonBrief;
	FHyperTwistTrainingDeck RetainedGuidanceComparisonDeck;
	FString RetainedGuidanceComparisonSelectedCaseId;
	FString CachedTemplateLaunchAnalyticsUserId;
	TArray<FHyperTwistTrainingTemplateLaunchScopedStats> CachedTemplateLaunchScopedStats;
	TArray<FHyperTwistCoachDashboardDecisionHistoryEntry> GuidanceDecisionHistoryEntries;
	TArray<FHyperTwistCoachDashboardHandoffHistoryEntry> HandoffHistoryEntries;
	TArray<FHyperTwistCoachDashboardTemplateLaunchHistoryEntry> TemplateLaunchHistoryEntries;
	TArray<FHyperTwistCoachDashboardMethodDrillFollowUpHistoryEntry> MethodDrillFollowUpHistoryEntries;
	TArray<FHyperTwistCoachDashboardMethodDrillRecoveryMemoryHistoryEntry>
		MethodDrillRecoveryMemoryHistoryEntries;
	bool bHasQueueRecoveryOutcome = false;
	FHyperTwistCoachDashboardQueueRecoveryOutcome QueueRecoveryOutcome;
	TArray<FHyperTwistCoachDashboardQueueRecoveryOutcome> QueueRecoveryOutcomeHistory;
	TArray<FHyperTwistCoachDashboardQueueSuppressionEntry> QueueSuppressionHistoryEntries;
	TArray<FHyperTwistCoachDashboardClosureRecoveryEntry> ClosureRecoveryHistoryEntries;
	EHyperTwistTrainingCoachHandoffKind DisplayedCoachHandoffRecommendationKind =
		EHyperTwistTrainingCoachHandoffKind::None;
	bool bDisplayedCoachHandoffRecommendationUsedDeferredFirstSuppressionSignal = false;
	bool bDisplayedCoachHandoffRecommendationUsedMethodDrillWeighting = false;
	bool bDisplayedCoachHandoffRecommendationUsedAlignedTightPacketAcceptedHistory = false;
	bool bDisplayedCoachHandoffRecommendationUsedAlignedBroadPacketAcceptedHistory = false;
	bool bDisplayedCoachHandoffRecommendationUsedAcceptedAlignedTightPacketOutcomeTrust = false;
	bool bDisplayedCoachHandoffRecommendationUsedAcceptedAlignedBroadPacketOutcomeTrust = false;
	bool bDisplayedCoachHandoffRecommendationUsedReliableAcceptedAlignedTightPacketOutcomeTrust = false;
	bool bDisplayedCoachHandoffRecommendationUsedReliableAcceptedAlignedBroadPacketOutcomeTrust = false;
	bool bDisplayedCoachHandoffRecommendationUsedReliableAcceptedAlignedTightPacketOutcomeHistory = false;
	bool bDisplayedCoachHandoffRecommendationUsedReliableAcceptedAlignedBroadPacketOutcomeHistory = false;
	bool bDisplayedCoachHandoffRecommendationUsedReliableAcceptedAlignedTightPacketExactHistory = false;
	bool bDisplayedCoachHandoffRecommendationUsedReliableAcceptedAlignedBroadPacketExactHistory = false;
	bool bDisplayedCoachHandoffRecommendationUsedReliableAcceptedAlignedTightPacketExactOutcomeHistory = false;
	bool bDisplayedCoachHandoffRecommendationUsedReliableAcceptedAlignedBroadPacketExactOutcomeHistory = false;
	bool bDisplayedCoachHandoffRecommendationUsedReliableAcceptedAlignedTightPacketExactOutcomeAcceptedHistory = false;
	bool bDisplayedCoachHandoffRecommendationUsedReliableAcceptedAlignedBroadPacketExactOutcomeAcceptedHistory = false;
	bool bDisplayedCoachHandoffRecommendationUsedReliableAcceptedAlignedTightPacketExactOutcomeReliableHistory = false;
	bool bDisplayedCoachHandoffRecommendationUsedReliableAcceptedAlignedBroadPacketExactOutcomeReliableHistory = false;
	FString DisplayedCoachHandoffMethodDrillRecoveryMemoryStartActionSourceLabel;
	FString DisplayedCoachHandoffRecommendationStatusLine;
	FString DisplayedCoachHandoffRecommendationDetailLine;
	FString DisplayedCoachHandoffStatusLine;
	FString DisplayedTransitionStatusLine;
	FString DisplayedActiveRunStatusLine;
	FString DisplayedActiveRunSummaryLine;
	FString DisplayedTemplateLaunchStatusLine;
	FString DisplayedTemplateLaunchDetailLine;
	FString DisplayedTemplateLaunchHistoryStatusLine;
	FString DisplayedTemplateLaunchHistoryDetailLine;
	FString DisplayedRunRecapStatusLine;
	FString DisplayedRunRecapDetailLine;
	FString DisplayedTemplateLaunchActionLabel;
	FString DisplayedRepeatRunActionLabel;
	FString DisplayedDismissRecapActionLabel;
	FString DisplayedCurrentCasePromptLine;
	FString DisplayedCurrentCaseNotationLine;
	FString DisplayedAttemptTimeHintLabel;
	FString DisplayedUseTargetTimeLabel;
	FString DisplayedUseAverageTimeLabel;
	FString DisplayedStartTimerControlLabel;
	FString DisplayedCancelTimerControlLabel;
	FString DisplayedCaptureSplitControlLabel;
	FString DisplayedUndoSplitControlLabel;
	FString DisplayedRecordSuccessActionLabel;
	FString DisplayedRecordFailureActionLabel;
	FString DisplayedRecordTimeoutActionLabel;
	FString DisplayedRecordDnfActionLabel;
	FString DisplayedLastAttemptReviewSummaryLine;
	FString DisplayedLastAttemptTimingLine;
	FString DisplayedLastAttemptDerivedPhaseLine;
	FString DisplayedAttemptInputStatusLine;
	FString DisplayedSplitCaptureStatusLine;
	FString DisplayedTimerStatusLine;
	FString DisplayedPreviewRecommendedActionLabel;
	FString DisplayedPreviewFollowUpActionLabel;
	FString DisplayedStartPreviewDeckActionLabel;
	FString DisplayedStartPreviewCaseActionLabel;
	FString DisplayedRecommendedDeckPreviewLine;
	FString DisplayedFollowUpDeckPreviewLine;
	FString DisplayedMethodDrillDiagnosticsStatusLine;
	FString DisplayedMethodDrillDiagnosticsDetailLine;
	FString DisplayedMethodDrillFollowUpActionLabel;
	FString DisplayedPrimaryActionLabel;
	FString DisplayedVerificationActionLabel;
	FString DisplayedVerificationStatusLine;
	FString DisplayedVerificationDetailLine;
	FString DisplayedRecognitionStatusLine;
	FString DisplayedRecognitionDetailLine;
	FString DisplayedReviewPolicyStatusLine;
	FString DisplayedReviewPolicyDetailLine;
	FString DisplayedDeferQueueActionLabel;
	FString DisplayedPromoteQueueActionLabel;
	FString DisplayedQueueRecoveryActionLabel;
	FString DisplayedCompleteRunControlLabel;
	FString DisplayedClearRunControlLabel;
	FString DisplayedContinueRunLabel;
	FString DisplayedQueuedRunLabel;
	FString DisplayedFollowUpRunLabel;
	FString DisplayedRecommendedRunLabel;
	FString DisplayedQueueStatusLine;
	FString DisplayedQueueCountsLine;
	FString DisplayedQueueExecutionLine;
	FString DisplayedQueueRecoveryStatusLine;
	FString DisplayedQueueRecoveryDetailLine;
	FString DisplayedQueueSuppressionDetailLine;
	FString DisplayedSelectedQueueSummaryLine;
	FString DisplayedSelectedQueueEntryDetailLine;
	FString DisplayedScheduleStatusLine;
	FString DisplayedSchedulePolicyLine;
 FString DisplayedClosureRecoveryStatusLine;
	FString DisplayedClosureRecoveryDetailLine;
	FString DisplayedMethodDrillRecoveryMemoryHistoryStatusLine;
	FString DisplayedMethodDrillRecoveryMemoryHistoryDetailLine;
  FString DisplayedMethodDrillRecoveryOutcomeHistoryStatusLine;
	FString DisplayedMethodDrillRecoveryOutcomeHistoryDetailLine;
	FString DisplayedHandoffHistoryStatusLine;
	FString DisplayedHandoffHistoryDetailLine;
	FString DisplayedGuidanceDecisionHistoryStatusLine;
	FString DisplayedGuidanceDecisionHistoryDetailLine;
	FString DisplayedPreviousQueueNavigationLabel;
	FString DisplayedStartSelectedQueueActionLabel;
	FString DisplayedNextQueueNavigationLabel;
	FString DisplayedPreviousQueueSuppressionNavigationLabel;
	FString DisplayedNextQueueSuppressionNavigationLabel;
	FString DisplayedPreviousClosureRecoveryNavigationLabel;
	FString DisplayedNextClosureRecoveryNavigationLabel;
	FString DisplayedPreviousMethodDrillRecoveryNavigationLabel;
	FString DisplayedNextMethodDrillRecoveryNavigationLabel;
	FString DisplayedPreviousMethodDrillRecoveryMemoryNavigationLabel;
  FString DisplayedNextMethodDrillRecoveryMemoryNavigationLabel;
	FString DisplayedMethodDrillFollowUpHistoryStatusLine;
	FString DisplayedMethodDrillFollowUpHistoryDetailLine;
	FString DisplayedPreviousMethodDrillFollowUpNavigationLabel;
	FString DisplayedNextMethodDrillFollowUpNavigationLabel;
	FString DisplayedPreviousHandoffHistoryNavigationLabel;
	FString DisplayedNextHandoffHistoryNavigationLabel;
	FString DisplayedPreviousGuidanceDecisionNavigationLabel;
	FString DisplayedNextGuidanceDecisionNavigationLabel;
	FString DisplayedPreviousTemplateLaunchNavigationLabel;
	FString DisplayedNextTemplateLaunchNavigationLabel;
	FString DisplayedPreviousAttemptNavigationLabel;
	FString DisplayedNextAttemptNavigationLabel;
	FString DisplayedPreviousGuidanceCaseNavigationLabel;
	FString DisplayedNextGuidanceCaseNavigationLabel;
	EHyperTwistCoachDashboardGuidancePreviewLane ActiveGuidancePreviewLane =
		EHyperTwistCoachDashboardGuidancePreviewLane::None;
	int32 SelectedGuidancePreviewCaseIndex = INDEX_NONE;
};
