using System;
using static PKHeX.Core.Encounters3Shadow;

namespace PKHeX.Core
{
    /// <summary>
    /// Permutations of teams, where a team may have multiple shadow Pokémon or alternate/re-battle scenarios.
    /// </summary>
    public static class Encounters3Teams
    {
        public static readonly TeamLock[] First = Array.Empty<TeamLock>();

        // Colo
        public static readonly TeamLock[] ColoMakuhita = { CMakuhita };
        public static readonly TeamLock[] Gligar = { CGligar };
        public static readonly TeamLock[] Murkrow = { CMurkrow };
        public static readonly TeamLock[] Heracross = { CHeracross };
        public static readonly TeamLock[] Ursaring = { CUrsaring };

        // E-Reader
        public static readonly TeamLock[] CTogepi = {ETogepi};
        public static readonly TeamLock[] CMareep = {EMareep};
        public static readonly TeamLock[] CScizor = {EScizor};

        // XD
        public static readonly TeamLock[] Spheal = { XSphealCipherLab, XSphealPhenacCityandPost };
        public static readonly TeamLock[] Seedot = { XSeedotCipherLab, XSeedotPhenacCity, XSeedotPost };

        public static readonly TeamLock[] Ralts = { XRalts };
        public static readonly TeamLock[] Poochyena = { XPoochyena };
        public static readonly TeamLock[] Ledyba = { XLedyba };
        public static readonly TeamLock[] Gulpin = { XGulpin };
        public static readonly TeamLock[] Spinarak = { XSpinarak };
        public static readonly TeamLock[] Numel = { XNumel };
        public static readonly TeamLock[] Shroomish = { XShroomish };
        public static readonly TeamLock[] Delcatty = { XDelcatty };
        public static readonly TeamLock[] Voltorb = { XVoltorb };
        public static readonly TeamLock[] Makuhita = { XMakuhita };
        public static readonly TeamLock[] Vulpix = { XVulpix };
        public static readonly TeamLock[] Duskull = { XDuskull };
        public static readonly TeamLock[] Mawile = { XMawile };
        public static readonly TeamLock[] Snorunt = { XSnorunt };
        public static readonly TeamLock[] Pineco = { XPineco };
        public static readonly TeamLock[] Natu = { XNatu };
        public static readonly TeamLock[] Roselia = { XRoselia };
        public static readonly TeamLock[] Meowth = { XMeowth };
        public static readonly TeamLock[] Swinub = { XSwinub };
        public static readonly TeamLock[] Spearow = { XSpearow };
        public static readonly TeamLock[] Grimer = { XGrimer };
        public static readonly TeamLock[] Seel = { XSeel };
        public static readonly TeamLock[] Lunatone = { XLunatone };
        public static readonly TeamLock[] Nosepass = { XNosepass };
        public static readonly TeamLock[] Paras = { XParas };
        public static readonly TeamLock[] Growlithe = { XGrowlithe, XGrowlitheParasSeen };
        public static readonly TeamLock[] Pidgeotto = { XPidgeotto, XPidgeottoBeedrillSeen };
        public static readonly TeamLock[] Tangela = { XTangela };
        public static readonly TeamLock[] Butterfree = { XButterfree, XButterfreeTangelaSeen };
        public static readonly TeamLock[] Magneton = { XMagneton };
        public static readonly TeamLock[] Venomoth = { XVenomoth };
        public static readonly TeamLock[] Weepinbell = { XWeepinbell, XWeepinbellVenomothSeen };
        public static readonly TeamLock[] Arbok = { XArbok };
        public static readonly TeamLock[] Primeape = { XPrimeape };
        public static readonly TeamLock[] Hypno = { XHypno, XHypnoPrimeapeSeen };
        public static readonly TeamLock[] Golduck = { XGolduck };
        public static readonly TeamLock[] Sableye = { XSableye, XSableyeGolduckSeen };
        public static readonly TeamLock[] Dodrio = { XDodrio };
        public static readonly TeamLock[] Raticate = { XRaticate, XRaticateDodrioSeen };
        public static readonly TeamLock[] Farfetchd = { XFarfetchd };
        public static readonly TeamLock[] Altaria = { XAltaria, XAltariaFarfetchdSeen };
        public static readonly TeamLock[] Kangaskhan = { XKangaskhan };
        public static readonly TeamLock[] Banette = { XBanette, XBanetteKangaskhanSeen };
        public static readonly TeamLock[] Magmar = { XMagmar };
        public static readonly TeamLock[] Pinsir = { XPinsir, XPinsirMagmarSeen };
        public static readonly TeamLock[] Rapidash = { XRapidash };
        public static readonly TeamLock[] Magcargo = { XMagcargo, XMagcargoRapidashSeen };
        public static readonly TeamLock[] Hitmonchan = { XHitmonchan };
        public static readonly TeamLock[] Hitmonlee = { XHitmonlee };
        public static readonly TeamLock[] Lickitung = { XLickitung };
        public static readonly TeamLock[] Scyther = { XScyther };
        public static readonly TeamLock[] Chansey = { XChansey, XChanseyScytherSeen };
        public static readonly TeamLock[] Solrock = { XSolrock };
        public static readonly TeamLock[] Starmie = { XStarmie, XStarmieSolrockSeen };
        public static readonly TeamLock[] Electabuzz = { XElectabuzz, XElectabuzzSwellowSeen };
        public static readonly TeamLock[] Snorlax = { XSnorlax, XSnorlaxSwellowSeen, XSnorlaxSwellowElectabuzzSeen };
        public static readonly TeamLock[] Poliwrath = { XPoliwrath };
        public static readonly TeamLock[] MrMime = { XMrMime, XMrMimePoliwrathSeen };
        public static readonly TeamLock[] Dugtrio = { XDugtrio };
        public static readonly TeamLock[] Manectric = { XManectric };
        public static readonly TeamLock[] Salamence = { XSalamence, XSalamenceManectricSeen };
        public static readonly TeamLock[] Marowak = { XMarowak, XMarowakManectricSeen, XMarowakManectricSalamenceSeen };
        public static readonly TeamLock[] Lapras = { XLapras, XLaprasManectricSeen, XLaprasManectricSalamenceSeen, XLaprasManectricMarowakSeen, XLaprasManectricSalamenceMarowakSeen };
        public static readonly TeamLock[] Moltres = { XMoltres };
        public static readonly TeamLock[] Exeggutor = { XExeggutor, XExeggutorRhydonMoltresSeen };
        public static readonly TeamLock[] Tauros = { XTauros, XTaurosRhydonMoltresSeen, XTaurosRhydonMoltresExeggutorSeen };
        public static readonly TeamLock[] Articuno = { XArticuno, XArticunoRhydonMoltresSeen, XArticunoRhydonMoltresTaurosSeen, XArticunoRhydonMoltresExeggutorSeen, XArticunoRhydonMoltresExeggutorTaurosSeen };
        public static readonly TeamLock[] Zapdos = { XZapdos, XZapdosRhydonMoltresSeen, XZapdosRhydonMoltresTaurosSeen, XZapdosRhydonMoltresArticunoSeen, XZapdosRhydonMoltresExeggutorSeen, XZapdosRhydonMoltresTaurosArticunoSeen, XZapdosRhydonMoltresExeggutorTaurosSeen, XZapdosRhydonMoltresExeggutorArticunoSeen, XZapdosRhydonMoltresExeggutorTaurosArticunoSeen };
        public static readonly TeamLock[] Dragonite = { XDragonite };
    }
}
