using JOBot.Proto;
using JOBot.TClient.Services;
using Telegram.Bot.Types;
namespace JOBot.TClient.Statements;
public class PrepareUserState(PrepareUserService prepareUserService, MenuService menuService)
{
///
/// Try to prepare user if is not registered
///
/// Update telegram object
/// Cancellation token
public async Task TryToPrepareUser(Update update, CancellationToken ct = default)
{
var user = await prepareUserService.GetUser(update, ct) ?? await prepareUserService.RegisterUser(update, ct);
if (!user.Eula)
{
await prepareUserService.AskForEulaAgreement(update, ct);
return; //interrupt while eula isn't accepted
}
await OnUserEulaValidStage(user, update, ct);
}
///
/// Signal for accepted eula
///
///
///
///
public async Task AcceptEula(GetUserResponse user, Update update, CancellationToken ct = default)
{
await prepareUserService.AcceptEula(update, ct);
await OnUserEulaValidStage(user, update, ct);
}
///
/// Check user logged
///
///
///
///
private async Task OnUserEulaValidStage(GetUserResponse user, Update update, CancellationToken ct = default)
{
if (!user.IsLogged)
{
await prepareUserService.Auth(update, ct);
return;
}
await OnAuthStage(user, update, ct);
}
///
/// Check user selected CV
///
///
///
///
private async Task OnAuthStage(GetUserResponse user, Update update, CancellationToken ct = default)
{
if (string.IsNullOrEmpty(user.CVUrl)) await prepareUserService.SelectCv(update, ct);
await menuService.RenderMenu(update, ct); //boilerplate
}
}