using EDPlayerJournal;
using EDPlayerJournal.BGS;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace EliteBGS.LogGenerator;

public class ThargoidFormatter : LogFormatter {
    public string GenerateLog(Objective objective) {
        List<ThargoidKill> kills = objective.EnabledOfType<ThargoidKill>().ToList();

        if (kills.Count == 0 ) {
            return "";
        }

        Dictionary<ThargoidVessel, List<ThargoidKill>> sorted = kills
                                                                    .GroupBy(x => x.ThargoidType)
                                                                    .ToDictionary(x => x.Key, x => x.ToList())
                                                                    ;

        StringBuilder builder = new StringBuilder();
        foreach (var k in sorted) {
            string name = Thargoid.GetVesselName(k.Key);
            builder.AppendFormat("{0}x {1}(s) killed\n", k.Value.Count, name);
        }

        return builder.ToString();
    }

    public string GenerateSummary(Objective objective) {
        List<ThargoidKill> kills = objective.EnabledOfType<ThargoidKill>().ToList();

        if (kills.Count == 0 ) {
            return "";
        }

        int drones = kills.Where(x => x.ThargoidType == ThargoidVessel.Revenant).Count();
        int scouts = kills.Where(x => x.ThargoidType == ThargoidVessel.Scout).Count();
        int interceptors = kills.Count - scouts - drones;

        StringBuilder builder = new StringBuilder();

        builder.Append("AX: ");
        if (interceptors > 0) {
            builder.AppendFormat("{0} INT", interceptors);
        }
        if (scouts > 0) {
            if (interceptors > 0) {
                builder.Append(", ");
            }
            builder.AppendFormat("{0} SCT", scouts);
        }
        if (drones > 0) {
            if (interceptors > 0 || scouts > 0) {
                builder.Append(", ");
            }
            builder.AppendFormat("{0} DRN", drones);
        }

        return builder.ToString();
    }
}
