// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "Blueprint/UserWidget.h"
#include "MainMenuWidget.generated.h"

class UButton;

/**
 * Le menu principal : quelques boutons par-dessus la vue du monde.
 *
 * Classe Abstract comme les autres widgets du projet : on cree un
 * WBP_MainMenu qui en herite, le C++ porte la logique et le Blueprint la mise
 * en page.
 *
 * Le widget ne decide de rien, il appelle AMainMenuPlayerController. Le jour ou
 * un bouton devra faire une action reseau, elle sera deja du bon cote : un
 * widget n'existe que sur la machine du joueur local, le serveur ne le voit pas.
 */
UCLASS(Abstract)
class SURVIVAL_PROJET_API UMainMenuWidget : public UUserWidget
{
	GENERATED_BODY()

public:
	virtual void NativeConstruct() override;

protected:
	/** Lance la partie solo. Nomme exactement "PlayButton" dans le WBP. */
	UPROPERTY(meta = (BindWidget))
	TObjectPtr<UButton> PlayButton;

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

	/** BindWidgetOptional : un WBP_MainMenu sans bouton Reglages reste valide. */
	UPROPERTY(meta = (BindWidgetOptional))
	TObjectPtr<UButton> SettingsButton;

	/**
	 * Coop a venir. BindWidgetOptional et non BindWidget : tu peux dessiner ton
	 * WBP_MainMenu sans eux aujourd'hui, le Blueprint compilera quand meme.
	 * S'ils existent, ils sont grises automatiquement.
	 */
	UPROPERTY(meta = (BindWidgetOptional))
	TObjectPtr<UButton> HostButton;

	UPROPERTY(meta = (BindWidgetOptional))
	TObjectPtr<UButton> JoinButton;

private:
	UFUNCTION()
	void HandlePlayClicked();

	UFUNCTION()
	void HandleQuitClicked();

	UFUNCTION()
	void HandleSettingsClicked();
};
