using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text.Json;
namespace FreedomFighter;
public record HighScoreEntry(string Name, int Score);
/// High score table; JSON replaces the original Highscore.dat record file.
public class HighScores
{
const string FileName = "highscore.json";
public HighScoreEntry[] List = new HighScoreEntry[10];
public void Load()
{
if (File.Exists(FileName))
{
try
{
var loaded = JsonSerializer.Deserialize(File.ReadAllText(FileName));
if (loaded is { Length: 10 }) { List = loaded; return; }
}
catch { /* fall through to defaults */ }
}
for (int i = 0; i < 10; i++)
List[i] = new HighScoreEntry("Nameless", 0);
Save();
}
public void Save() => File.WriteAllText(FileName, JsonSerializer.Serialize(List));
public bool Qualifies(int score) => score > List[9].Score;
public void Add(int num, string name, int score)
{
for (int i = 9; i >= num + 1; i--)
List[i] = List[i - 1];
List[num] = new HighScoreEntry(name, score);
}
/// Port of EnterHighScoreList: insert from the bottom up.
public void Enter(string name, int score)
{
for (int i = 8; i >= 0; i--)
{
if (score <= List[i].Score)
{
Add(i + 1, name, score);
break;
}
if (i == 0)
{
Add(i, name, score);
break;
}
}
Save();
}
}