Progression/ShipSkinUnlocks.cs
/// <summary>
/// Cookie-based ship skin unlock tracker. Client-side singleton.
/// </summary>
public sealed class ShipSkinUnlocks
{
	private static ShipSkinUnlocks _current;
	private static string CookieName => $"{Connection.Local?.DisplayName}.Skins";

	public List<string> UnlockedSkins { get; set; } = new();

	public bool IsUnlocked( ShipData.ShipSkinEntry skin, ShipData ship )
		=> UnlockedSkins.Contains( skin.SkinName + ship.ShipName );

	public void Unlock( ShipData.ShipSkinEntry skin, ShipData ship )
	{
		if ( IsUnlocked( skin, ship ) ) return;
		if ( Experience.Current.XP < skin.XPNeeded ) return;

		Experience.Current.XP -= skin.XPNeeded;
		UnlockedSkins.Add( skin.SkinName + ship.ShipName );
	}

	public void Save() => Cookie.Set( CookieName, this );

	public static ShipSkinUnlocks Current
	{
		get
		{
			_current ??= Cookie.Get<ShipSkinUnlocks>( CookieName, new() );
			return _current;
		}
	}
}