namespace EDPlayerJournal.Entries;

public class ReceiveTextEntry : Entry {
    /// <summary>
    /// From whom this message is
    /// </summary>
    public string? From { get; set; }
    /// <summary>
    /// The message, if it is just an NPC text, it will be a message ID
    /// </summary>
    public string? Message { get; set; }
    /// <summary>
    /// Message localised
    /// </summary>
    public string? MessageLocalised { get; set; }
    /// <summary>
    /// On what channel this was received.
    /// </summary>
    public string? Channel { get; set; }

    public bool HasNPCCategory {
        get {
            if (From == null) {
                return false;
            }

            if (From.Contains(';') && From.StartsWith("$")) {
                return true;
            }

            return false;
        }
    }

    /// <summary>
    /// Returns the NPC's category, if it has one.
    /// </summary>
    public string? NPCCategory {
        get {
            if (!HasNPCCategory || From == null) {
                return null;
            }

            string[] parts = From.Split(";", StringSplitOptions.TrimEntries);
            if (parts.Length < 2) {
                return null;
            }

            return string.Format("{0};", parts[0]);
        }
    }

    /// <summary>
    /// Returns the NPC's category, if it has one.
    /// </summary>
    public string? NPCName {
        get {
            if (!HasNPCCategory || From == null) {
                return null;
            }

            string[] parts = From.Split(";", StringSplitOptions.TrimEntries);
            if (parts.Length < 2) {
                return null;
            }

            return parts[1];
        }
    }

    protected override void Initialise() {
        From = JSON.Value<string>("From");
        Message = JSON.Value<string>("Message");
        MessageLocalised = JSON.Value<string>("Message_localised");
        Channel = JSON.Value<string>("Channel");
    }
}