namespace WebEMSim
{
    public class Match
    {
        public enum MatchResult
        {
            TEAM_A_WIN = 0, TEAM_B_WIN = 1, DRAW = 2
        }

        private Team[] _teams = new Team[2];

        private int[] _goals = new int[2];

        private MatchResult _result;




        public Match(Team team1, Team team2)
        {
            _teams[0] = team1;
            _teams[1] = team2;
        }

        private void CommitStats()
        {
            for (int teamIdx = 0; teamIdx < _teams.Length; teamIdx++)
            {
                int goalsFor = _goals[teamIdx];
                int goalsAgainst = _goals[1 - teamIdx];

                int points = 0;

                if(_result == (MatchResult)teamIdx) //vergleiche enum
                {
                    points = 3;
                }

                if(_result == MatchResult.DRAW)
                {
                    points = 1;
                }

                _teams[teamIdx].LogStats(points, goalsFor, goalsAgainst);
            }
        }

        private void CalculateResult()
        {
            if (_goals[0] > _goals[1])
            {
                _result = MatchResult.TEAM_A_WIN;
                return;
            }

            if (_goals[1] > _goals[0])
            {
                _result = MatchResult.TEAM_B_WIN;
                return;
            }
            
            _result = MatchResult.DRAW;
        }

        public void Play()
        {
            for (int goalsIdx = 0; goalsIdx < _goals.Length; goalsIdx++)
            {
                _goals[goalsIdx] = Random.Shared.Next(6);
            }

            CalculateResult();
            CommitStats();
        }

        private Team GetWinner()
        {
            if (_result == Match.MatchResult.TEAM_A_WIN)
            {
                return _teams[0];
            }

            if (_result == Match.MatchResult.TEAM_B_WIN)
            {
                return _teams[1];
            }

            Table drawResolver = new([_teams[0], _teams[1]]);

            return drawResolver.GetTable()[0];
        }

        public MatchResult Result { get => _result; }
        public Team Winner { get => GetWinner(); }
        public Team TeamA { get => _teams[0]; }
        public Team TeamB { get => _teams[1]; }
        public int GoalsA { get => _goals[0]; }
        public int GoalsB { get => _goals[1]; }
    }
}