using GmRelay.Shared.Domain; using GmRelay.Shared.Platform; using GmRelay.Shared.Features.Sessions.ListSessions; namespace GmRelay.Bot.Features.Sessions.ListSessions; internal static class SessionListMessageRenderer { public static string RenderText(IReadOnlyList sessions) { var text = "πŸ“… Π‘Π»ΠΈΠΆΠ°ΠΉΡˆΠΈΠ΅ ΠΈΠ³Ρ€Ρ‹:\n\n"; foreach (var session in sessions) { var seats = session.MaxPlayers.HasValue ? $"{session.PlayerCount}/{session.MaxPlayers.Value}" : session.PlayerCount.ToString(System.Globalization.CultureInfo.InvariantCulture); var waitlist = session.WaitlistCount > 0 ? $", ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅: {session.WaitlistCount}" : string.Empty; text += $"πŸ”Ή {session.ScheduledAt.FormatMoscow()} β€” {System.Net.WebUtility.HtmlEncode(session.Title)} (ΠœΠ΅ΡΡ‚Π°: {seats}{waitlist})\n"; } return text; } public static IReadOnlyList RenderActions(IReadOnlyList sessions) { if (sessions.Count == 0) { return []; } return sessions.First().CanManage ? RenderManagerActions(sessions) : RenderPlayerActions(sessions); } private static IReadOnlyList RenderManagerActions(IReadOnlyList sessions) { var actions = new List(); foreach (var session in sessions) { var dateTitle = session.ScheduledAt.FormatMoscowShort(); actions.Add(new PlatformMessageAction( $"cancel_session:{session.Id}", $"❌ ΠžΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ {dateTitle}", $"cancel_session:{session.Id}")); actions.Add(new PlatformMessageAction( $"reschedule_session:{session.Id}", $"⏰ ΠŸΠ΅Ρ€Π΅Π½Π΅ΡΡ‚ΠΈ {dateTitle}", $"reschedule_session:{session.Id}")); if (SessionCapacityRules.CanPromoteWaitlistedPlayer(session.MaxPlayers, session.PlayerCount, session.WaitlistCount)) { actions.Add(new PlatformMessageAction( $"promote_waitlist:{session.Id}", $"⬆️ Π‘ оТидания {dateTitle}", $"promote_waitlist:{session.Id}")); } actions.Add(new PlatformMessageAction( $"delete_session:{session.Id}", $"πŸ—‘ Π£Π΄Π°Π»ΠΈΡ‚ΡŒ {dateTitle}", $"delete_session:{session.Id}")); } return actions; } private static IReadOnlyList RenderPlayerActions(IReadOnlyList sessions) { var actions = new List(); foreach (var session in sessions) { var dateTitle = session.ScheduledAt.FormatMoscowShort(); if (session.IsUserActive || session.IsUserWaitlisted) { actions.Add(new PlatformMessageAction( $"leave_session:{session.Id}", session.IsUserWaitlisted ? $"βœ–οΈ Π’Ρ‹ΠΉΡ‚ΠΈ ΠΈΠ· оТидания {dateTitle}" : $"βœ–οΈ Π’Ρ‹ΠΉΡ‚ΠΈ {dateTitle}", $"leave_session:{session.Id}")); } else { actions.Add(new PlatformMessageAction( $"join_session:{session.Id}", $"βœ… Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ {dateTitle}", $"join_session:{session.Id}")); } } return actions; } }