// © 2025 Naked People Team. All Rights Reserved.

#pragma once

#include "CoreMinimal.h"
#include "CommonActivatableWidget.h"
#include "ConfirmModalWidget.generated.h"

class UButton;
class UTextBlock;

// Reusable yes/no confirmation popup. Pushed onto a stack by the menu that owns it;
// the opener calls Setup() for the copy and binds OnConfirmed / OnCancelled to react.
UCLASS(Abstract)
class NAKEDDESIRE_API UConfirmModalWidget : public UCommonActivatableWidget
{
	GENERATED_BODY()

public:
	// Sets the popup copy. Safe to call before the widget tree exists (cached and applied on activate).
	void Setup(const FText& InTitle, const FText& InMessage);

	// C++-only result events — the opener binds whichever it cares about.
	DECLARE_MULTICAST_DELEGATE(FOnConfirmModalResult);
	FOnConfirmModalResult OnConfirmed;
	FOnConfirmModalResult OnCancelled;

protected:
	virtual void NativeOnActivated() override;

private:
	UPROPERTY(meta = (BindWidget))
	TObjectPtr<UButton> ConfirmButton;

	UPROPERTY(meta = (BindWidget))
	TObjectPtr<UButton> CancelButton;

	UPROPERTY(meta = (BindWidgetOptional))
	TObjectPtr<UTextBlock> TitleText;

	UPROPERTY(meta = (BindWidgetOptional))
	TObjectPtr<UTextBlock> MessageText;

	FText PendingTitle;
	FText PendingMessage;

	UFUNCTION()
	void HandleConfirmClicked();

	UFUNCTION()
	void HandleCancelClicked();
};