using Cysharp.Threading.Tasks;
using Cysharp.Threading.Tasks.Linq;
using ScenarioFlow.Tasks;
using System.Threading;
using UnityEngine;
using UnityEngine.UI;

namespace HowToWriteSFText
{
	public class ButtonNotifier : MonoBehaviour, INextNotifier, ICancellationNotifier
	{
		[SerializeField]
		private Button button;

		public UniTask NotifyNextAsync(CancellationToken cancellationToken)
		{
			return WaitUntilButtonClickedAsync(cancellationToken);
		}

		public UniTask NotifyCancellationAsync(CancellationToken cancellationToken)
		{
			return WaitUntilButtonClickedAsync(cancellationToken);
		}

		private UniTask WaitUntilButtonClickedAsync(CancellationToken cancellationToken)
		{
			return button.OnClickAsAsyncEnumerable(cancellationToken: cancellationToken)
				.FirstOrDefaultAsync(cancellationToken: cancellationToken);
		}
	}
}