using System;
using System.Linq;
namespace EDPlayerJournal.BGS;
public class CombatZone : Transaction {
///
/// Type string for ground combat zone
///
public static readonly string GroundCombatZone = "Ground";
///
/// Type string for ship combat zones
///
public static readonly string ShipCombatZone = "Ship";
///
/// Difficulty low
///
public static readonly string DifficultyLow = "Low";
///
/// Difficulty medium
///
public static readonly string DifficultyMedium = "Medium";
///
/// Difficulty high
///
public static readonly string DifficultyHigh = "High";
///
/// Type, either on foot or ship
///
public string Type { get; set; } = ShipCombatZone;
///
/// Difficulty type, low, medium or high.
///
public string Grade { get; set; } = DifficultyLow;
///
/// Whether spec ops were won.
///
public bool? SpecOps { get; set; }
///
/// Whether captain was won
///
public bool? Captain { get; set; }
///
/// Whether correspondent objective was won
///
public bool? Correspondent { get; set; }
///
/// Whether cap ship objective was won
///
public bool? CapitalShip { get; set; }
///
/// How many optional objectives were completed?
///
public int OptionalObjectivesCompleted {
get {
if (IsGround) {
return 0;
}
return new List() { SpecOps, Captain, Correspondent, CapitalShip }
.Where(x => x != null && x == true)
.Count()
;
}
}
///
/// Returns true if it is an on foot/ground combat zone
///
public bool IsGround {
get { return string.Compare(Type, GroundCombatZone) == 0; }
}
///
/// Returns true if it is an on foot combat zone
///
public bool IsShip {
get { return string.Compare(Type, ShipCombatZone) == 0; }
}
public override int CompareTo(Transaction? obj) {
if (obj == null || obj.GetType() != typeof(CombatZone)) {
return -1;
}
CombatZone? b = obj as CombatZone;
if (b == null) {
return -1;
}
if (b.Faction != Faction || b.System != System) {
return -1; // System and faction don't match
}
if (b.Type != b.Type || b.Grade != b.Grade) {
return -1; // grade and type don't match
}
return 0;
}
public override string ToString() {
return string.Format("Won {0} {1} Combat Zone", Grade, Type);
}
}