// Copyright (c), Firelight Technologies Pty, Ltd. 2012-2023.

#pragma once

#include "FMODEventEditor.h"

namespace FMOD
{
namespace Studio
{
class EventDescription;
}
}

class SFMODEventEditorPanel : public SCompoundWidget
{
public:
    SLATE_BEGIN_ARGS(SFMODEventEditorPanel) {}
    SLATE_ARGUMENT(TWeakPtr<FFMODEventEditor>, FMODEventEditor)
    SLATE_END_ARGS()

    ~SFMODEventEditorPanel();

    /** SCompoundWidget interface */
    void Construct(const FArguments &InArgs);

private:
    TSharedRef<SBorder> ConstructToolbar(FMOD::Studio::EventDescription *EventDescription);
    TSharedRef<SExpandableArea> ConstructInfo(FMOD::Studio::EventDescription *EventDescription);
    TSharedRef<SExpandableArea> ConstructParameters(FMOD::Studio::EventDescription *EventDescription);
    TSharedRef<SExpandableArea> ConstructUserProperties(FMOD::Studio::EventDescription *EventDescription);

    /** Editor that owns this panel */
    TWeakPtr<FFMODEventEditor> FMODEventEditorPtr;

    FReply OnClickedPlay();
    FReply OnClickedStop();
    FReply OnClickedPause();

    TOptional<float> GetParameterValue(FMOD_STUDIO_PARAMETER_ID ParameterId) const;
    void OnParameterValueChanged(float NewValue, FMOD_STUDIO_PARAMETER_ID ParameterId);
};