#pragma once

#include "CoreMinimal.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "HyperTwistMemory/HyperTwistMemoryTypes.h"
#include "HyperTwistRecognition/HyperTwistRecognitionTypes.h"
#include "HyperTwistReplay/HyperTwistReplayReviewLibrary.h"
#include "HyperTwistSkills/HyperTwistSkillTypes.h"
#include "HyperTwistTraining/HyperTwistTrainingMediaExportLibrary.h"
#include "HyperTwistTraining/HyperTwistTrainingSharedAssetLibrary.h"
#include "HyperTwistSkillCoreLibrary.generated.h"

UCLASS()
class UNREALHYPERTWIST_API UHyperTwistSkillCoreLibrary : public UBlueprintFunctionLibrary
{
	GENERATED_BODY()

public:
	UFUNCTION(BlueprintPure, Category = "HyperTwist|Skills")
	static FHyperTwistSkillRegistryState DeriveSkillRegistryState();

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Skills")
	static FHyperTwistSkillControlState DeriveSkillControlState(
		const FHyperTwistSkillRegistryState& RegistryState,
		const FHyperTwistSkillControlProfile& ControlProfile
	);

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Skills")
	static FHyperTwistSkillAuditLedgerState DeriveSkillAuditLedgerState(
		const FHyperTwistSkillRegistryState& RegistryState,
		const FHyperTwistSkillControlState& ControlState
	);

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Skills")
	static FHyperTwistSkillAuthoringHarnessState DeriveSkillAuthoringHarnessState(
		const FHyperTwistSkillRegistryState& RegistryState,
		const FHyperTwistSkillControlState& ControlState,
		const FHyperTwistSkillAuditLedgerState& AuditLedgerState
	);

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Skills")
	static FHyperTwistSkillAnalyzerWrapperState DeriveSkillAnalyzerWrapperState(
		const FHyperTwistSkillRegistryState& RegistryState,
		const FHyperTwistSkillControlState& ControlState,
		const FHyperTwistSkillAuthoringHarnessState& AuthoringHarnessState
	);

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Skills")
	static FHyperTwistSkillCleanRoomCommandContractState DeriveSkillCleanRoomCommandContractState(
		const FHyperTwistSkillRegistryState& RegistryState,
		const FHyperTwistSkillControlState& ControlState,
		const FHyperTwistSkillAuthoringHarnessState& AuthoringHarnessState
	);

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Skills")
	static FHyperTwistSkillCleanRoomSkillSpecState DeriveSkillCleanRoomSkillSpecState(
		const FHyperTwistSkillRegistryState& RegistryState,
		const FHyperTwistSkillControlState& ControlState,
		const FHyperTwistSkillAuthoringHarnessState& AuthoringHarnessState,
		const FHyperTwistSkillCleanRoomCommandContractState& CommandContractState
	);

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Skills")
	static FHyperTwistSkillContinuityResumeState DeriveSkillContinuityResumeState(
		const FHyperTwistSkillRegistryState& RegistryState,
		const FHyperTwistSkillControlState& ControlState,
		const FHyperTwistSkillAuthoringHarnessState& AuthoringHarnessState,
		const FHyperTwistMemoryChronicleContinuityState& ChronicleContinuityState,
		const FHyperTwistMemoryRecallSharedContextState& RecallSharedContextState,
		const FHyperTwistMemoryKnowledgeNotesState& KnowledgeNotesState
	);

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Skills")
	static FHyperTwistSkillRecallCompactViewState DeriveSkillRecallCompactViewState(
		const FHyperTwistSkillRegistryState& RegistryState,
		const FHyperTwistSkillControlState& ControlState,
		const FHyperTwistSkillAuthoringHarnessState& AuthoringHarnessState,
		const FHyperTwistMemoryRecallSharedContextState& RecallSharedContextState,
		const FHyperTwistMemoryDerivedAdjunctState& DerivedAdjunctState
	);

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Skills")
	static FHyperTwistSkillWorkflowMemoryCaptureState DeriveSkillWorkflowMemoryCaptureState(
		const FHyperTwistSkillRegistryState& RegistryState,
		const FHyperTwistSkillControlState& ControlState,
		const FHyperTwistSkillAuthoringHarnessState& AuthoringHarnessState,
		const FHyperTwistMemoryLedgerState& LedgerState,
		const FHyperTwistMemoryChronicleContinuityState& ChronicleContinuityState
	);

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Skills")
	static FHyperTwistSkillExtractionState DeriveSkillExtractionState(
		const FHyperTwistSkillRegistryState& RegistryState,
		const FHyperTwistSkillControlState& ControlState,
		const FHyperTwistSkillAuthoringHarnessState& AuthoringHarnessState
	);

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Skills")
	static FHyperTwistSkillBrowserDiagnosticsState DeriveSkillBrowserDiagnosticsState(
		const FHyperTwistSkillRegistryState& RegistryState,
		const FHyperTwistSkillControlState& ControlState,
		const FHyperTwistSkillAuthoringHarnessState& AuthoringHarnessState,
		const FHyperTwistSkillExtractionState& ExtractionState
	);

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Skills")
	static FHyperTwistSkillDesignShellState DeriveSkillDesignShellState(
		const FHyperTwistSkillRegistryState& RegistryState,
		const FHyperTwistSkillControlState& ControlState,
		const FHyperTwistSkillAuthoringHarnessState& AuthoringHarnessState,
		const FHyperTwistSkillExtractionState& ExtractionState,
		const FHyperTwistSkillBrowserDiagnosticsState& BrowserDiagnosticsState
	);

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Skills")
	static FHyperTwistSkillWorkflowReviewState DeriveSkillWorkflowReviewState(
		const FHyperTwistSkillRegistryState& RegistryState,
		const FHyperTwistSkillControlState& ControlState,
		const FHyperTwistSkillAuthoringHarnessState& AuthoringHarnessState,
		const FHyperTwistSkillExtractionState& ExtractionState,
		const FHyperTwistSkillWorkflowMemoryCaptureState& WorkflowMemoryCaptureState,
		const FHyperTwistSkillDesignShellState& DesignShellState
	);

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Skills")
	static FHyperTwistSkillImplementationDelegationState
		DeriveSkillImplementationDelegationState(
			const FHyperTwistSkillRegistryState& RegistryState,
			const FHyperTwistSkillControlState& ControlState,
			const FHyperTwistSkillAuthoringHarnessState& AuthoringHarnessState,
			const FHyperTwistSkillWorkflowReviewState& WorkflowReviewState,
			const FHyperTwistSkillDesignShellState& DesignShellState
		);

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Skills")
	static FHyperTwistSkillPlanOrchestrationState
		DeriveSkillPlanOrchestrationState(
			const FHyperTwistSkillRegistryState& RegistryState,
			const FHyperTwistSkillControlState& ControlState,
			const FHyperTwistSkillAuthoringHarnessState& AuthoringHarnessState,
			const FHyperTwistSkillImplementationDelegationState&
				ImplementationDelegationState,
			const FHyperTwistSkillWorkflowMemoryCaptureState&
				WorkflowMemoryCaptureState,
			const FHyperTwistSkillWorkflowReviewState& WorkflowReviewState
		);

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Skills")
	static FHyperTwistSkillProviderProfileRoutingState
		DeriveSkillProviderProfileRoutingState(
			const FHyperTwistSkillRegistryState& RegistryState,
			const FHyperTwistSkillControlState& ControlState,
			const FHyperTwistSkillAuthoringHarnessState& AuthoringHarnessState,
			const FHyperTwistSkillAnalyzerWrapperState& AnalyzerWrapperState,
			const FHyperTwistSpeechSessionConfig& SpeechSessionConfig,
			const FHyperTwistSpeechServiceHealth& SpeechServiceHealth
		);

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Skills")
	static FHyperTwistSkillProviderUsageOperationsAuditState
		DeriveSkillProviderUsageOperationsAuditState(
			const FHyperTwistSkillRegistryState& RegistryState,
			const FHyperTwistSkillControlState& ControlState,
			const FHyperTwistSkillAuthoringHarnessState& AuthoringHarnessState,
			const FHyperTwistSkillProviderProfileRoutingState&
				ProviderProfileRoutingState,
			const FHyperTwistSpeechSessionConfig& SpeechSessionConfig,
			const FHyperTwistSpeechServiceHealth& SpeechServiceHealth
		);

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Skills")
	static FHyperTwistSkillDomainPackFrameworkState
		DeriveSkillDomainPackFrameworkState(
			const FHyperTwistSkillRegistryState& RegistryState,
			const FHyperTwistSkillControlState& ControlState,
			const FHyperTwistSkillAuthoringHarnessState& AuthoringHarnessState,
			const FHyperTwistSkillPlanOrchestrationState& PlanOrchestrationState,
			const FHyperTwistSkillProviderUsageOperationsAuditState&
				ProviderUsageOperationsAuditState
		);

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Skills")
	static FHyperTwistSkillRetainedDomainPackState
		DeriveSkillRetainedDomainPackState(
			const FHyperTwistSkillRegistryState& RegistryState,
			const FHyperTwistSkillControlState& ControlState,
			const FHyperTwistSkillAuthoringHarnessState& AuthoringHarnessState,
			const FHyperTwistSkillDomainPackFrameworkState& DomainPackFrameworkState,
			const FHyperTwistTrainingRepositoryIntegrityReport&
				TrainingRepositoryIntegrityReport,
			const FHyperTwistTrainingDeckHistorySummary& DeckHistorySummary,
			const FHyperTwistTrainingTimingTrendSummary& TimingTrendSummary,
			const FHyperTwistTrainingPersonalBestSummary& PersonalBestSummary,
			const FHyperTwistReplayReviewAnalytics& ReplayReviewAnalytics,
			const TArray<FHyperTwistContentPack>& RetainedContentPacks,
			const FHyperTwistTrainingTimerExportPacket& TrainingTimerExportPacket,
			const FHyperTwistTrainingMediaExportReferenceBundle&
				MediaExportReferenceBundle
		);

	UFUNCTION(BlueprintPure, Category = "HyperTwist|Skills")
	static FHyperTwistSkillCreativeMediaPackState
		DeriveSkillCreativeMediaPackState(
			const FHyperTwistSkillRegistryState& RegistryState,
			const FHyperTwistSkillControlState& ControlState,
			const FHyperTwistSkillAuthoringHarnessState& AuthoringHarnessState,
			const FHyperTwistSkillRetainedDomainPackState& RetainedDomainPackState,
			const FHyperTwistReplayReviewAnalytics& ReplayReviewAnalytics,
			const FHyperTwistTrainingTimerExportPacket& TrainingTimerExportPacket,
			const FHyperTwistTrainingMediaExportReferenceBundle&
				MediaExportReferenceBundle,
			const FHyperTwistTrainingSharedAssetReferenceBundle&
				SharedAssetReferenceBundle
		);
};
