#pragma once

#include "CoreMinimal.h"
#include "Engine/DataAsset.h"
#include "DrillTypes.generated.h"

// Represents a single step or case within a drill.
USTRUCT(BlueprintType)
struct HYPERTWISTCORE_API FDrillCase
{
    GENERATED_BODY()

    // The initial state to present to the user (e.g., a scrambled cube state).
    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Drill")
    FString InitialState;

    // The target for a recognition drill (e.g., name of the algorithm).
    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Drill")
    FString RecognitionTarget;

    // The solution or next step.
    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Drill")
    FString Solution;
};

// A DataAsset that defines a collection of drill cases.
UCLASS(BlueprintType)
class HYPERTWISTCORE_API UHyperTwistDrillAsset : public UDataAsset
{
    GENERATED_BODY()

public:
    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Drill")
    TArray<FDrillCase> DrillCases;

    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Drill")
    FString MethodName; // e.g., "OLL", "PLL"
};

// Represents the user's saved progress and favorites.
USTRUCT(BlueprintType)
struct HYPERTWISTCORE_API FDrillUserData
{
    GENERATED_BODY()

    UPROPERTY()
    TArray<FString> FavoriteCases; // Storing by InitialState as a key

    UPROPERTY()
    TArray<FString> QueuedBatch; // A list of asset paths
};
