﻿using System;
using System.Collections.Generic;
using System.Linq;
using Unity.VisualScripting;
using Unity.VisualScripting.Antlr3.Runtime.Tree;
using UnityEngine;

public class SpeciesAndClassCounter : MonoBehaviour
{
    public static event Action Changed;
    public static Dictionary<Profession, List<Battler>> BattlersByClass = new();
    public static Dictionary<Species, List<Battler>> BattlersBySpecies = new();
    List<Battler> _allBattlers = new ();

    void OnEnable()
    {
        Battler.AnyJoinedGame += AddBattler;
        Battler.AnyLeftGame += RemoveBattler;
    }

    void RemoveBattler(Battler b)
    {
        _allBattlers.Remove(b);
        UpdateBattlers();
    }

    void AddBattler(Battler b)
    {
        _allBattlers.Add(b);
        UpdateBattlers();
    }

    void UpdateBattlers()
    {
        BattlersByClass.Clear();
        BattlersBySpecies.Clear();
        foreach (var b in _allBattlers)
        {
            if (!BattlersByClass.ContainsKey(b.Profession))
                BattlersByClass.Add(b.Profession, new List<Battler>());
            BattlersByClass[b.Profession].Add(b);
            
            if (!BattlersBySpecies.ContainsKey(b.Species))
                BattlersBySpecies.Add(b.Species, new List<Battler>());
            BattlersBySpecies[b.Species].Add(b);
        }
        
        Changed?.Invoke();
    }

    public static int GetHitModifier(Battler battler)
    {
        if (BattlersByClass == null) 
            return 0;
        var speciesName = Players.Get(battler.PlayerName).Profession;
        return -BattlersByClass[speciesName].Count - 1;
    }
}