using System.Text.Json.Serialization;
namespace MultiversalDiplomacy.Model;
///
/// Represents a unit at a particular point in time.
///
public class Unit
{
///
/// The previous iteration of a unit. This is null if the unit was just built.
///
public string? Past { get; }
///
/// The location on the map where the unit is.
///
public string Location { get; }
///
/// The season in time when the unit is.
///
public Season Season { get; }
///
/// The allegiance of the unit.
///
public Power Power { get; }
///
/// The type of unit.
///
public UnitType Type { get; }
///
/// A unique designation for this unit.
///
[JsonIgnore]
public string Key => $"{Type.ToShort()} {Season.Timeline}-{Location}@{Season.Turn}";
public Unit(string? past, string location, Season season, Power power, UnitType type)
{
this.Past = past;
this.Location = location;
this.Season = season;
this.Power = power;
this.Type = type;
}
public override string ToString()
=> $"{Power.Name[0]} {Type.ToShort()} {Season.Timeline}-{Location}@{Season.Turn}";
///
/// Create a new unit. No validation is performed; the adjudicator should only call this
/// method after accepting a build order.
///
public static Unit Build(string location, Season season, Power power, UnitType type)
=> new(past: null, location, season, power, type);
///
/// Advance this unit's timeline to a new location and season.
///
public Unit Next(string location, Season season)
=> new(past: this.Key, location, season, this.Power, this.Type);
}