using Shogi.Contracts.Api; using Shogi.UI.Pages.Home.Api; namespace Shogi.UI.Pages.Home; public class PromotePrompt { private readonly IShogiApi shogiApi; private string? sessionName; private MovePieceCommand? command; public PromotePrompt(IShogiApi shogiApi) { this.shogiApi = shogiApi; IsVisible = false; OnClickCancel = Hide; } public bool IsVisible { get; private set; } public Action OnClickCancel; public Func? OnClickNo; public Func? OnClickYes; public void Show(string sessionName, MovePieceCommand command) { this.sessionName = sessionName; this.command = command; IsVisible = true; OnClickNo = Move; OnClickYes = MoveAndPromote; } public void Hide() { IsVisible = false; OnClickNo = null; OnClickYes = null; } private Task Move() { if (command != null && sessionName != null) { command.IsPromotion = false; return shogiApi.PostMove(sessionName, command); } return Task.CompletedTask; } private Task MoveAndPromote() { if (command != null && sessionName != null) { command.IsPromotion = true; return shogiApi.PostMove(sessionName, command); } return Task.CompletedTask; } }