using GmRelay.Shared.Domain; namespace GmRelay.Bot.Features.Confirmation.HandleRsvp; internal sealed record RsvpFlowDecision( string CallbackText, bool ShouldAlertGm, bool ShouldRevertSessionToConfirmationSent, bool ShouldMarkSessionConfirmed, bool ShouldNotifyGroup, bool ShouldNotifyGm); internal static class RsvpFlowRules { public static RsvpFlowDecision Evaluate( string requestedStatus, string currentSessionStatus, int totalParticipants, int confirmedParticipants) { if (requestedStatus == RsvpStatus.Declined) { return new RsvpFlowDecision( CallbackText: "\u0412\u044b \u043e\u0442\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u043e\u0442 \u0443\u0447\u0430\u0441\u0442\u0438\u044f.", ShouldAlertGm: true, ShouldRevertSessionToConfirmationSent: currentSessionStatus == SessionStatus.Confirmed, ShouldMarkSessionConfirmed: false, ShouldNotifyGroup: false, ShouldNotifyGm: false); } var everyoneConfirmed = confirmedParticipants == totalParticipants; return new RsvpFlowDecision( CallbackText: "\u0412\u044b \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u043b\u0438 \u0443\u0447\u0430\u0441\u0442\u0438\u0435!", ShouldAlertGm: false, ShouldRevertSessionToConfirmationSent: false, ShouldMarkSessionConfirmed: everyoneConfirmed, ShouldNotifyGroup: everyoneConfirmed, ShouldNotifyGm: everyoneConfirmed); } }