using EDPlayerJournal;
using EDPlayerJournal.BGS;
using System.Linq;
using System.Text;

namespace EliteBGS.LogGenerator;

class CombatZoneFormat : LogFormatter {
    public string GenerateLog(Objective objective) {
        var logs = objective
            .EnabledOfType<CombatZone>()
            .GroupBy(x => new { x.Type, x.Grade })
            .ToDictionary(x => x.Key, x => x.ToList())
            ;
        StringBuilder builder = new StringBuilder();

        if (logs == null || logs.Count() <= 0) {
            return "";
        }

        foreach (var log in logs) {
            int optionals = log.Value
                                .Sum(x => x.OptionalObjectivesCompleted)
                                ;
            if (!string.IsNullOrEmpty(log.Key.Grade)) {
                builder.AppendFormat("Won {0}x {1} {2} Combat Zone(s)",
                    log.Value.Count,
                    log.Key.Grade,
                    log.Key.Type
                    );
            } else {
                builder.AppendFormat("Won {0}x {1} Combat Zone(s)",
                    log.Value.Count,
                    log.Key.Type
                    );
            }

            if (optionals > 0) {
                builder.AppendFormat(" (with {0} optional objectives)", optionals);
            }
            builder.Append("\n");
        }

        return builder.ToString().Trim();
    }
}