using System.Text;
using EDPlayerJournal.Entries;

namespace EDPlayerJournal.BGS; 
public class MissionFailed : Transaction {
    public MissionFailedEntry? Failed { get; set; }
    public Mission? Mission { get; set; }

    public MissionFailed() { }

    public MissionFailed(MissionFailedEntry failed) {
        Entries.Add(failed);
        Failed = failed;
    }

    /// <summary>
    /// Returns the amount of influence generated by failing this mission. The
    /// system returns no influence for one INF missions, but sadly also for
    /// when the influence had no affect at all (i.e. during a war).
    /// </summary>
    public long InfluenceAmount {
        get {
            if (Mission == null || string.IsNullOrEmpty(Mission.Influence)) {
                return -1;
            } else {
                return Mission.Influence.Length * -1;
            }
        }
    }

    public override int CompareTo(Transaction? other) {
        if (other == null || other.GetType() != typeof(MissionFailed)) {
            return -1;
        }

        MissionFailed? failed = other as MissionFailed;

        if (failed == null) {
            return -1;
        }

        /* if it is the same mission name, the same faction and the same system,
         * collate mission failures together 
         */
        if (string.Compare(failed.Failed?.Mission?.Name, Failed?.Mission?.Name) == 0 &&
            failed.Faction == Faction &&
            failed.System == System) {
            return 0;
        }

        return -1;
    }

    public override string ToString() {
        StringBuilder builder = new StringBuilder();

        if (Failed == null || Mission == null) {
            return "";
        }

        builder.AppendFormat(" Mission failed: \"{0}\"",
            Mission?.FriendlyName
            );

        return builder.ToString();
    }
}