namespace Aeshnidae.Leaderboard;
///
/// The leaderboards in the Aeshnidae Codex: your standing first, then the top five
/// of every board, two boards a page. Found by Aeshnidae.Codex through reflection.
///
public static class CodexPage
{
public static string Title => "Leaderboards";
public static string[] Pages(Player player)
{
if (player is null || !Db.Ready || Boards.Snapshot.Count == 0)
return Array.Empty();
var pages = new List();
var me = new StringBuilder();
me.AppendLine("LEADERBOARDS");
me.AppendLine();
me.AppendLine($"{Boards.CharacterCount} characters. Where you stand:");
me.AppendLine();
foreach (var board in Boards.All)
{
var pos = Boards.Position(board.Key, player.Name);
if (pos is not null)
me.AppendLine($"{board.Title}: #{pos.Rank}, {pos.Value:N0}");
}
me.AppendLine();
me.AppendLine("/top for the full list.");
pages.Add(me.ToString().TrimEnd());
var sb = new StringBuilder();
var onPage = 0;
foreach (var board in Boards.All)
{
if (!Boards.Snapshot.TryGetValue(board.Key, out var rows) || rows.Count == 0)
continue;
if (onPage == 2)
{
pages.Add(sb.ToString().TrimEnd());
sb.Clear();
onPage = 0;
}
sb.AppendLine(board.Title.ToUpperInvariant());
foreach (var row in rows.Take(5))
sb.AppendLine($"{row.Rank}. {row.Name}: {row.Value:N0}");
sb.AppendLine();
onPage++;
}
if (sb.Length > 0)
pages.Add(sb.ToString().TrimEnd());
return pages.ToArray();
}
}