Game/Idle/IdlePet.cs
using System;

/// <summary>
/// The pet is the Reactor's Fragment sink.
///
/// Cores buy upgrades that reset on Meltdown, and Flux buys perks that never do.
/// The pet sits outside both: Fragments condense slowly, on a daily ceiling, and
/// go into a permanent output multiplier that takes weeks rather than hours to
/// finish. It is the long-horizon goal that survives every reset.
/// </summary>
public static class IdlePet
{
	public const int MaxLevel = 6;

	/// <summary>Fragments needed to go from <paramref name="level"/> to the next one.</summary>
	public static int CostToUpgrade( int level ) => level switch
	{
		1 => 120,
		2 => 300,
		3 => 700,
		4 => 1_500,
		5 => 3_200,
		_ => 0,
	};

	/// <summary>Total Fragments to take a fresh pet all the way to level 6.</summary>
	public static int TotalCost
	{
		get
		{
			int total = 0;
			for ( int lvl = 1; lvl < MaxLevel; lvl++ ) total += CostToUpgrade( lvl );
			return total;
		}
	}

	public static bool IsMaxed( int level ) => level >= MaxLevel;

	/// <summary>Reactor output multiplier granted by the pet, before Pet Link.</summary>
	public static double OutputBonus( int level ) => 0.15 * Math.Max( 0, level - 1 );

	public static string Name( int level ) => level switch
	{
		1 => "Mysterious Egg",
		2 => "Cat",
		3 => "Wolf",
		4 => "Tiger",
		5 => "Baby Drake",
		_ => "Dragon",
	};

	public static string Emoji( int level ) => level switch
	{
		1 => "🥚",
		2 => "🐱",
		3 => "🐺",
		4 => "🐯",
		5 => "🐣",
		_ => "🐉",
	};

	public static string Blurb( int level ) => level switch
	{
		1 => "Something is moving in there. Feed it Fragments and find out what.",
		2 => "It watches the reactor and purrs at every chain.",
		3 => "Faster, hungrier, and it has started organising the drones.",
		4 => "Big enough now to shove chests into the blast radius itself.",
		5 => "Wings, and the beginnings of a temper.",
		_ => "Fully grown. The reactor runs hot around it.",
	};
}