#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "HyperTwistTraining/HyperTwistTrainingCoachLibrary.h"
#include "HyperTwistTraining/HyperTwistTrainingTypes.h"
#include "HyperTwistTrainingSessionActor.generated.h"

UCLASS(BlueprintType, Blueprintable)
class UNREALHYPERTWIST_API AHyperTwistTrainingSessionActor : public AActor
{
	GENERATED_BODY()

public:
	AHyperTwistTrainingSessionActor();

	virtual void BeginPlay() override;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist|Training")
	bool bAutoStartSampleRunOnBeginPlay = false;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist|Training")
	FString AutoStartUserId = TEXT("local-user");

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist|Training")
	FString AutoStartSessionId = TEXT("training_session_runtime");

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist|Training")
	EHyperTwistTrainingDeliveryMode AutoStartMode = EHyperTwistTrainingDeliveryMode::Timer;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist|Training|Coach")
	int32 DefaultCoachMaxCases = 5;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training")
	FHyperTwistTrainingRunState CachedRunState;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training")
	FHyperTwistTrainingSessionSummary CachedRunSummary;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training")
	FHyperTwistTrainingRunStepResult LastStepResult;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training|Recognition")
	FHyperTwistTrainingRecognitionSessionState CachedRecognitionSessionState;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training|Coach")
	TArray<FHyperTwistCoachSignal> CachedCoachSignals;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training|Coach")
	FHyperTwistCoachBrief CachedCoachBrief;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training|Coach")
	FHyperTwistCoachBrief CachedCoachFollowUpBrief;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training|Coach")
	FHyperTwistCoachSessionQueueSummary CachedCoachSessionQueueSummary;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachSessionQueueState CachedCoachSessionQueueState;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training|Coach")
	FHyperTwistCoachScheduleHorizonSummary CachedCoachScheduleHorizonSummary;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training|Coach")
	FHyperTwistCoachSchedulePolicySummary CachedCoachSchedulePolicySummary;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachSessionQueueExecutionSummary CachedCoachQueueExecutionSummary;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachPanelState CachedCoachPanelState;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingDeck CachedCoachRecommendedDeck;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingDeck CachedCoachFollowUpDeck;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training|Templates")
	TArray<FHyperTwistTrainingSessionTemplate> CachedActiveTrainingSessionTemplates;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training|Templates")
	TArray<FHyperTwistTrainingSessionTemplate> CachedAutoStartUserTrainingSessionTemplates;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training|Imported")
	FHyperTwistTrainingImportedRuntimeSelectionState CachedImportedRuntimeSelectionState;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training|Imported")
	FHyperTwistTrainingImportedGeneratedModeLaunchConfig CachedImportedGeneratedModeLaunchConfig;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training|Imported")
	FHyperTwistTrainingImportedGeneratedModeLaunchRequest CachedImportedGeneratedModeLaunchRequest;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training|Imported")
	FHyperTwistTrainingImportedGeneratedModeLaunchRequest CachedLatestGeneratedModeLaunchRequestForActiveDeck;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training|Imported")
	FString LastGeneratedModeExecutionBlockedReason;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training")
	FHyperTwistTrainingRepositoryRoundTripVerification CachedRepositoryRoundTripVerification;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training")
	bool HasActiveTrainingRun() const;

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training")
	FHyperTwistTrainingRunState StartSampleClassicRun();

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training")
	FHyperTwistTrainingRunState StartRunFromDeck(
		const FHyperTwistTrainingDeck& Deck,
		const FString& UserId,
		const FString& SessionId,
		EHyperTwistTrainingDeliveryMode Mode
	);

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training")
	FHyperTwistTrainingRunStepResult SubmitAttempt(
		const FHyperTwistTrainingAttempt& Attempt,
		int32 TimeMs
	);

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training")
	FHyperTwistTrainingSession CompleteRun(bool bAbortSession);

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training")
	void ClearRun();

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Recognition")
	bool OpenActiveRecognitionSession(FString& OutError);

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Recognition")
	FHyperTwistVisionPreviewResult SubmitActiveRecognitionFrame(const FHyperTwistVisionFrameEnvelope& Frame);

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Recognition")
	FHyperTwistVisionCommitResult CommitActiveRecognitionObservation(const FHyperTwistVisionCommitRequest& Request);

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Recognition")
	FHyperTwistVisionFinalizeResult FinalizeActiveRecognitionSession();

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Recognition")
	bool CloseActiveRecognitionSession(FString& OutError);

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training")
	void RefreshCachedTrainingState();

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Templates")
	TArray<FHyperTwistTrainingSessionTemplate> GetTrainingSessionTemplatesForUser(
		const FString& UserId,
		const FString& ReferenceUtc
	);

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Imported")
	FHyperTwistTrainingRunState ApplyActiveImportedRuntimeSelectorOption(
		const FString& SelectorId,
		const FString& OptionId
	);

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Imported")
	FHyperTwistTrainingRunState ApplyActiveImportedGeneratedModeSelectorChoice(
		const FString& SelectorId,
		const FString& SelectedValue,
		const FString& DisplayValue
	);

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Imported")
	FHyperTwistTrainingImportedGeneratedModeLaunchRequest CreateActiveImportedGeneratedModeLaunchRequest(
		const FString& RequestSource
	);

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Imported")
	bool TryExecuteActiveImportedGeneratedModeLaunchRequest(
		FHyperTwistTrainingRunState& OutRunState,
		FString& OutBlockedReason
	);

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Imported")
	FHyperTwistTrainingImportedRuntimeSelectionState GetDisplayedImportedRuntimeSelectionState() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Imported")
	FHyperTwistTrainingImportedGeneratedModeLaunchConfig
	GetDisplayedImportedGeneratedModeLaunchConfig() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Imported")
	FHyperTwistTrainingImportedGeneratedModeLaunchRequest
	GetDisplayedImportedGeneratedModeLaunchRequest() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Imported")
	FHyperTwistTrainingImportedGeneratedModeLaunchRequest
	GetDisplayedLatestGeneratedModeLaunchRequestForActiveDeck() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Imported")
	FString GetDisplayedGeneratedModeExecutionBlockedReason() const;

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingDeck BuildCoachRecommendedDeck(int32 MaxCases);

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingDeck BuildCoachFollowUpDeck(int32 MaxCases);

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Templates")
	FHyperTwistTrainingRunState StartRunFromTemplate(
		const FString& TemplateId,
		const FString& UserId,
		const FString& SessionId
	);

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FString ResolveCoachHandoffStartActionSourceLabel(
		EHyperTwistTrainingCoachHandoffKind HandoffKind
	) const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FString ResolvePrimaryCoachActionStartActionSourceLabel() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	TArray<FHyperTwistCoachSignal> GetDisplayedCoachSignals() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistCoachBrief GetDisplayedCoachBrief() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistCoachBrief GetDisplayedCoachFollowUpBrief() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistCoachSessionQueueSummary GetDisplayedCoachSessionQueueSummary() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistCoachScheduleHorizonSummary GetDisplayedCoachScheduleHorizonSummary() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistCoachSchedulePolicySummary GetDisplayedCoachSchedulePolicySummary() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachPrimaryActionSurface GetDisplayedPrimaryCoachActionSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachQueueControlSurface GetDisplayedCoachQueueControlSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachQueueRecoveryPostureSurface
	GetDisplayedCoachQueueRecoveryPostureSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachHandoffContinuationSurface
	GetDisplayedCoachHandoffContinuationSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachFocusProvenanceSurface
	GetDisplayedCoachFocusProvenanceSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachWorkloadBudgetSurface
	GetDisplayedCoachWorkloadBudgetSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachReadinessEligibilitySurface
	GetDisplayedCoachReadinessEligibilitySurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachVerificationRecognitionReviewContextSurface
	GetDisplayedCoachVerificationRecognitionReviewContextSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachGeneratedModeLaunchExecutionContextSurface
	GetDisplayedCoachGeneratedModeLaunchExecutionContextSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachGeneratedModeSelectorApplicationContextSurface
	GetDisplayedCoachGeneratedModeSelectorApplicationContextSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachGeneratedModeSelectorRosterSurface
	GetDisplayedCoachGeneratedModeSelectorRosterSurface() const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachGeneratedModeSelectorOptionMenuSurface
	GetDisplayedCoachGeneratedModeSelectorOptionMenuSurface(const FString& SelectorId) const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachGeneratedModeSelectorOptionActionabilitySurface
	GetDisplayedCoachGeneratedModeSelectorOptionActionabilitySurface(const FString& SelectorId) const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachGeneratedModeSelectorOptionDispatchSurface
	GetDisplayedCoachGeneratedModeSelectorOptionDispatchSurface(const FString& SelectorId) const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachGeneratedModeSelectorOptionExecutionImpactSurface
	GetDisplayedCoachGeneratedModeSelectorOptionExecutionImpactSurface(const FString& SelectorId) const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachGeneratedModeSelectorOptionRequestAlignmentSurface
	GetDisplayedCoachGeneratedModeSelectorOptionRequestAlignmentSurface(const FString& SelectorId) const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachGeneratedModeSelectorOptionStoredRequestDeltaSurface
	GetDisplayedCoachGeneratedModeSelectorOptionStoredRequestDeltaSurface(const FString& SelectorId) const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachGeneratedModeSelectorOptionLaunchRequestPreviewSurface
	GetDisplayedCoachGeneratedModeSelectorOptionLaunchRequestPreviewSurface(const FString& SelectorId) const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachGeneratedModeSelectorOptionLaunchRequestMetadataPreviewSurface
	GetDisplayedCoachGeneratedModeSelectorOptionLaunchRequestMetadataPreviewSurface(
		const FString& SelectorId
	) const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachGeneratedModeSelectorOptionLaunchRequestEnvelopePreviewSurface
	GetDisplayedCoachGeneratedModeSelectorOptionLaunchRequestEnvelopePreviewSurface(
		const FString& SelectorId
	) const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionCasePreviewSurface
	GetDisplayedCoachGeneratedModeSelectorOptionOwnedExecutionCasePreviewSurface(
		const FString& SelectorId
	) const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionPromptPreviewSurface
	GetDisplayedCoachGeneratedModeSelectorOptionOwnedExecutionPromptPreviewSurface(
		const FString& SelectorId
	) const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionDeliveryPreviewSurface
	GetDisplayedCoachGeneratedModeSelectorOptionOwnedExecutionDeliveryPreviewSurface(
		const FString& SelectorId
	) const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionPuzzleSubsetDifficultyPreviewSurface
	GetDisplayedCoachGeneratedModeSelectorOptionOwnedExecutionPuzzleSubsetDifficultyPreviewSurface(
		const FString& SelectorId
	) const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionProvenancePreviewSurface
	GetDisplayedCoachGeneratedModeSelectorOptionOwnedExecutionProvenancePreviewSurface(
		const FString& SelectorId
	) const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionDeckTitleSelectionPolicyPreviewSurface
	GetDisplayedCoachGeneratedModeSelectorOptionOwnedExecutionDeckTitleSelectionPolicyPreviewSurface(
		const FString& SelectorId
	) const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionDeckIdRuntimeSurfaceRetentionPreviewSurface
	GetDisplayedCoachGeneratedModeSelectorOptionOwnedExecutionDeckIdRuntimeSurfaceRetentionPreviewSurface(
		const FString& SelectorId
	) const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionDeliveryModeRosterAllowedModeRetentionPreviewSurface
	GetDisplayedCoachGeneratedModeSelectorOptionOwnedExecutionDeliveryModeRosterAllowedModeRetentionPreviewSurface(
		const FString& SelectorId
	) const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionRealScrambleVirtualCubeSmartCubeCapabilityRetentionPreviewSurface
	GetDisplayedCoachGeneratedModeSelectorOptionOwnedExecutionRealScrambleVirtualCubeSmartCubeCapabilityRetentionPreviewSurface(
		const FString& SelectorId
	) const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionTimingPolicyRetentionPreviewSurface
	GetDisplayedCoachGeneratedModeSelectorOptionOwnedExecutionTimingPolicyRetentionPreviewSurface(
		const FString& SelectorId
	) const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseDetailRetentionPreviewSurface
	GetDisplayedCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseDetailRetentionPreviewSurface(
		const FString& SelectorId
	) const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhasePhaseIdLabelFallbackProvenancePreviewSurface
	GetDisplayedCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhasePhaseIdLabelFallbackProvenancePreviewSurface(
		const FString& SelectorId
	) const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseDuplicatePruningSurvivorProvenancePreviewSurface
	GetDisplayedCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseDuplicatePruningSurvivorProvenancePreviewSurface(
		const FString& SelectorId
	) const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseNormalizationSummaryPreviewSurface
	GetDisplayedCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseNormalizationSummaryPreviewSurface(
		const FString& SelectorId
	) const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseRawRowNormalizedPhaseFusionPreviewSurface
	GetDisplayedCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseRawRowNormalizedPhaseFusionPreviewSurface(
		const FString& SelectorId
	) const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionCanonicalInspectSurface
	GetDisplayedCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionCanonicalInspectSurface(
		const FString& SelectorId
	) const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionSurvivorPhaseRosterInspectSurface
	GetDisplayedCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionSurvivorPhaseRosterInspectSurface(
		const FString& SelectorId
	) const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionDroppedRowAuditInspectSurface
	GetDisplayedCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionDroppedRowAuditInspectSurface(
		const FString& SelectorId
	) const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionPhaseIdFallbackRosterInspectSurface
	GetDisplayedCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionPhaseIdFallbackRosterInspectSurface(
		const FString& SelectorId
	) const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionExplicitLabelRosterInspectSurface
	GetDisplayedCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionExplicitLabelRosterInspectSurface(
		const FString& SelectorId
	) const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionSummaryInspectSurface
	GetDisplayedCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionSummaryInspectSurface(
		const FString& SelectorId
	) const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionRosterPairInspectSurface
	GetDisplayedCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionRosterPairInspectSurface(
		const FString& SelectorId
	) const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionMergedOrderedRosterInspectSurface
	GetDisplayedCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionMergedOrderedRosterInspectSurface(
		const FString& SelectorId
	) const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionMergedOrderedRosterPhaseIdLookupInspectSurface
	GetDisplayedCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionMergedOrderedRosterPhaseIdLookupInspectSurface(
		const FString& SelectorId,
		const FString& PhaseId
	) const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionMergedOrderedRosterNormalizedOrderLookupInspectSurface
	GetDisplayedCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionMergedOrderedRosterNormalizedOrderLookupInspectSurface(
		const FString& SelectorId,
		int32 NormalizedOrder
	) const;

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionMergedOrderedRosterEvaluationOrderLookupInspectSurface
	GetDisplayedCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionMergedOrderedRosterEvaluationOrderLookupInspectSurface(
		const FString& SelectorId,
		int32 EvaluationOrder
	) const;

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingRunState StartCoachRecommendedTrainingRun(int32 MaxCases);

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingRunState StartCoachFollowUpTrainingRun(int32 MaxCases);

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingRunState StartPrimaryCoachTrainingRun(int32 MaxCases);

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingRunState StartNextQueuedCoachTrainingRun(int32 MaxCases);

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingRunState StartCoachQueueEntryTrainingRun(
		const FString& EntryId,
		int32 MaxCases
	);

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingRunState StartDisplayedCoachRecommendedTrainingRun(int32 MaxCases);

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingRunState StartDisplayedCoachFollowUpTrainingRun(int32 MaxCases);

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingRunState StartDisplayedPrimaryCoachTrainingRun(int32 MaxCases);

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingRunState StartDisplayedNextQueuedCoachTrainingRun(int32 MaxCases);

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach")
	FHyperTwistTrainingRunState StartDisplayedCoachQueueEntryTrainingRun(int32 MaxCases);

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach")
	bool DeferCoachQueueEntry(
		const FString& EntryId,
		const FString& DeferredUntilUtc,
		const FString& DeferralReasonLabel,
		bool bManualReschedule
	);

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach")
	bool DeferDisplayedCoachQueueEntry(
		const FString& DeferredUntilUtc,
		const FString& DeferralReasonLabel,
		bool bManualReschedule
	);

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach")
	bool PromoteCoachQueueEntry(const FString& EntryId);

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

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training")
	FHyperTwistTrainingRepositoryRoundTripVerification VerifyRepositoryRoundTrip();
};
