using System.Text;
using EDPlayerJournal.Entries;

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

    public MissionFailed() { }

    public MissionFailed(MissionAcceptedEntry accepted) {
        if (accepted.Mission == null) {
            throw new Exception("Mission cannot be null");
        }
        Accepted = accepted;
        Faction = accepted.Mission.Faction;
    }

    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 int Amount {
        get { return Entries.Count + 1; }
    }

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

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

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

        return builder.ToString();
    }
}