namespace PKHeX.Core
{
    public interface IGymTeamInfo
    {
        ushort GetBadgeVictorySpecies(uint badge, uint slot);
        void SetBadgeVictorySpecies(uint badge, uint slot, ushort species);
    }

    public static class GymTeamInfoExtensions
    {
        public static ushort[][] GetGymTeams(this IGymTeamInfo info)
        {
            ushort[][] teams = new ushort[8][];
            for (uint badge = 0; badge < teams.Length; badge++)
                teams[badge] = GetGymTeam(info, badge);
            return teams;
        }

        private static ushort[] GetGymTeam(IGymTeamInfo info, uint badge)
        {
            var team = new ushort[6];
            for (uint slot = 0; slot < team.Length; slot++)
                team[slot] = info.GetBadgeVictorySpecies(badge, slot);
            return team;
        }

        public static void SetGymTeams(this IGymTeamInfo info, ushort[][] teams)
        {
            for (uint badge = 0; badge < teams.Length; badge++)
                info.SetGymTeam(badge, teams[badge]);
        }

        public static void SetGymTeam(this IGymTeamInfo info, uint badge, ushort[] team)
        {
            for (uint slot = 0; slot < team.Length; slot++)
                info.SetBadgeVictorySpecies(badge, slot, team[slot]);
        }
    }
}