using System.Collections.Generic;
using Model.Entity.Parts;
using Model.Types;

namespace Model.Entity.Data;

public partial class EntityData
{
    public static Dictionary<string, EntityModel> GetResearchData()
    {
        return new Dictionary<string, EntityModel>
        {
            // Upgrades
            // Q'Rath
            {
                DataType.UPGRADE_GreavesOfAhqar,
                new EntityModel(DataType.UPGRADE_GreavesOfAhqar, EntityType.Tech)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Greaves Of Ahqar", Descriptive = DescriptiveType.Upgrade,
                        Description = "Increases the Sipari speed by 75."
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "Q", HotkeyGroup = "X" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityProductionModel
                        { Alloy = 100, Ether = 100, BuildTime = 100, ProducedBy = DataType.BUILDING_Reliquary })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_Reliquary,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityVanguardReplacedModel
                        { ImmortalId = DataType.IMMORTAL_Orzum, ReplacedById = DataType.UPGRADE_FaithCastBlades })
            },
            {
                DataType.UPGRADE_RadiantWard,
                new EntityModel(DataType.UPGRADE_RadiantWard, EntityType.Tech)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Research Radiant Ward", Descriptive = DescriptiveType.Upgrade,
                        Description = "Unlocks the dervish's Radiant Ward ability"
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "R", HoldSpace = true, HotkeyGroup = "X" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityProductionModel
                        { Alloy = 80, Ether = 80, BuildTime = 34, ProducedBy = DataType.BUILDING_HouseOfFadingSaints })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_HouseOfFadingSaints,
                        Requirement = RequirementType.Production_Building
                    })
            },

            {
                DataType.UPGRADE_FortifiedIcons,
                new EntityModel(DataType.UPGRADE_FortifiedIcons, EntityType.Tech)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Fortified Icons", Descriptive = DescriptiveType.Upgrade,
                        Description =
                            """
                            Sipari get more Shields.

                            Bonus Shields from <b style="color:white">Hallowed Ground</b> 
                            """
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "Q", HotkeyGroup = "X", HoldSpace = true })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityProductionModel
                        { Alloy = 125, Ether = 125, BuildTime = 60, ProducedBy = DataType.BUILDING_EyeOfAros })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_EyeOfAros,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_Reliquary,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityVanguardReplacedModel
                        { ImmortalId = DataType.IMMORTAL_Orzum, ReplacedById = DataType.UPGRADE_IconOfKhastEem })
            },

            {
                DataType.UPGRADE_FaithCastBlades,
                new EntityModel(DataType.UPGRADE_FaithCastBlades, EntityType.Tech)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Faith-Cast Blades", Descriptive = DescriptiveType.Upgrade,
                        Description =
                            """
                            Zentari get more range attack when in Hallowed Ground.
                            """
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "Q", HotkeyGroup = "X" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityProductionModel
                        { Alloy = 50, Ether = 125, BuildTime = 60, ProducedBy = DataType.BUILDING_Reliquary })
                    .AddPart(new EntityRequirementModel
                        { Id = DataType.BUILDING_Reliquary, Requirement = RequirementType.Research_Building })
                    .AddPart(new EntityVanguardAddedModel
                        { ReplaceId = DataType.UPGRADE_GreavesOfAhqar, ImmortalId = DataType.IMMORTAL_Orzum })
            },
            {
                DataType.UPGRADE_RelicOfTheWrathfulGaze,
                new EntityModel(DataType.UPGRADE_RelicOfTheWrathfulGaze, EntityType.Tech)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Relic Of The Wrathful Gaze", Descriptive = DescriptiveType.Upgrade,
                        Description = "Increases the Castigator's anti-air weapon range."
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "W", HotkeyGroup = "X", HoldSpace = true })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityProductionModel
                        { Alloy = 75, Ether = 75, BuildTime = 29, ProducedBy = DataType.BUILDING_HouseOfFadingSaints })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_HouseOfFadingSaints,
                        Requirement = RequirementType.Production_Building
                    })
            },

            {
                DataType.UPGRADE_PsalmOfFire,
                new EntityModel(DataType.UPGRADE_PsalmOfFire, EntityType.Tech)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Psalm of Fire", Descriptive = DescriptiveType.Upgrade,
                        Description = "Fire Singers get area damage."
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "S", HotkeyGroup = "X", HoldSpace = true })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityProductionModel
                    {
                        Alloy = 125, Ether = 200, BuildTime = 64,
                        ProducedBy = DataType.BUILDING_KeeperOfTheHardenedFlames
                    })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_KeeperOfTheHardenedFlames,
                        Requirement = RequirementType.Production_Building
                    })
            },

            {
                DataType.UPGRADE_WindStep,
                new EntityModel(DataType.UPGRADE_WindStep, EntityType.Tech)
                    .AddPart(new EntityInfoModel
                        { Name = "Windstep", Descriptive = DescriptiveType.Upgrade, Description = "Unlocks windstep." })
                    .AddPart(new EntityHotkeyModel { Hotkey = "E", HotkeyGroup = "X" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityProductionModel
                        { Alloy = 125, Ether = 100, BuildTime = 75, ProducedBy = DataType.BUILDING_MonasteryOfIzur })
                    .AddPart(new EntityRequirementModel
                        { Id = DataType.BUILDING_Reliquary, Requirement = RequirementType.Production_Building })
            },
            {
                DataType.UPGRADE_ZephyrRange,
                new EntityModel(DataType.UPGRADE_ZephyrRange, EntityType.Tech)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Zephyr Range", Descriptive = DescriptiveType.Upgrade,
                        Description = "Increases Zephyr's range by 100."
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "W", HotkeyGroup = "X" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityProductionModel
                        { Alloy = 100, Ether = 50, BuildTime = 50, ProducedBy = DataType.BUILDING_Reliquary })
                    .AddPart(new EntityRequirementModel
                        { Id = DataType.BUILDING_Reliquary, Requirement = RequirementType.Research_Building })
                    .AddPart(new EntityIdUpgradeModel { Id = DataType.UPGRADE_WindStep })
                    .AddPart(new EntityIdUpgradeModel { Id = DataType.UPGRADE_ZephyrRange })
            },
            {
                DataType.UPGRADE_SiroccoScript,
                new EntityModel(DataType.UPGRADE_SiroccoScript, EntityType.Tech)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Sirocco Script", Descriptive = DescriptiveType.Upgrade,
                        Description = "Grant's the Dervish Sirocco Script"
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "R", HotkeyGroup = "X", HoldSpace = true })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityProductionModel
                    {
                        Alloy = 100, Ether = 125, BuildTime = 60, ProducedBy = DataType.BUILDING_HouseOfFadingSaints
                    })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_HouseOfFadingSaints,
                        Requirement = RequirementType.Production_Building
                    })
            },

            {
                DataType.UPGRADE_IconOfTheEnduringVigil,
                new EntityModel(DataType.UPGRADE_IconOfTheEnduringVigil, EntityType.Tech)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Icon of the Enduring Vigil", Descriptive = DescriptiveType.Upgrade,
                        Description = "The Dervish's Radiant Wards become permanent."
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "F", HotkeyGroup = "X", HoldSpace = true })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityProductionModel
                    {
                        Alloy = 100, Ether = 100, BuildTime = 34, ProducedBy = DataType.BUILDING_HouseOfFadingSaints
                    })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_HouseOfFadingSaints,
                        Requirement = RequirementType.Production_Building
                    })
            },

            {
                DataType.UPGRADE_AbsolverHealthUpgrade,
                new EntityModel(DataType.UPGRADE_AbsolverHealthUpgrade, EntityType.Tech)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Absolver Health Upgrade", Descriptive = DescriptiveType.Upgrade,
                        Description = "Absolvers get more HP and damage reductions"
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "F", HotkeyGroup = "X" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityProductionModel
                    {
                        Alloy = 150, Ether = 150, BuildTime = 90, ProducedBy = DataType.BUILDING_HouseOfFadingSaints
                    })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_HouseOfFadingSaints,
                        Requirement = RequirementType.Production_Building
                    })
            },

            {
                DataType.UPGRADE_Awestrike,
                new EntityModel(DataType.UPGRADE_Awestrike, EntityType.Tech)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Awestrike", Descriptive = DescriptiveType.Upgrade,
                        Description = "Unlocks a damage spell for Shar'u"
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "R", HotkeyGroup = "X" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityProductionModel
                    {
                        Alloy = 125, Ether = 150, BuildTime = 45, ProducedBy = DataType.BUILDING_HouseOfFadingSaints
                    })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_EyeOfAros,
                        Requirement = RequirementType.Production_Building
                    })
            },

            {
                DataType.UPGRADE_IconOfKhastEem,
                new EntityModel(DataType.UPGRADE_IconOfKhastEem, EntityType.Tech)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Icon of Khast'Eem", Descriptive = DescriptiveType.Upgrade,
                        Description = "Grants the Zentari shields and flat armor reduction."
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "Q", HoldSpace = true, HotkeyGroup = "X" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityProductionModel
                        { Alloy = 100, Ether = 100, BuildTime = 43, ProducedBy = DataType.BUILDING_EyeOfAros })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_EyeOfAros,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityVanguardAddedModel
                        { ReplaceId = DataType.UPGRADE_FortifiedIcons, ImmortalId = DataType.IMMORTAL_Orzum })
            },
            {
                DataType.UPGRADE_WingsOfTheKenLatir,
                new EntityModel(DataType.UPGRADE_WingsOfTheKenLatir, EntityType.Tech)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Wings of the Ken'Latir", Descriptive = DescriptiveType.Upgrade,
                        Description = "Wardens use their empowered attacks more often."
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "E", HoldSpace = true, HotkeyGroup = "X" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityProductionModel
                        { Alloy = 150, Ether = 100, BuildTime = 60, ProducedBy = DataType.BUILDING_BearerOfTheCrown })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_EyeOfAros, Requirement = RequirementType.Production_Building
                    })
            },
            {
                DataType.UPGRADE_TitheBlades,
                new EntityModel(DataType.UPGRADE_TitheBlades, EntityType.Tech)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Tithe Blades", Descriptive = DescriptiveType.Upgrade,
                        Description = "Unlocks a utility ability for Thrones."
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "A", HoldSpace = true, HotkeyGroup = "X" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityProductionModel
                        { Alloy = 200, Ether = 200, BuildTime = 120, ProducedBy = DataType.BUILDING_BearerOfTheCrown })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_BearerOfTheCrown, Requirement = RequirementType.Production_Building
                    })
            },
            // Upgrades
            // Aru
            {
                DataType.UPGRADE_Offering,
                new EntityModel(DataType.UPGRADE_Offering, EntityType.Tech)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Offering",
                        Descriptive = DescriptiveType.Upgrade,
                        Description = "Unlocks Offering"
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "W", HotkeyGroup = "X" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_AltarOfTheWorthy,
                        Requirement = RequirementType.Research_Building
                    })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_Neurocyte,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityProductionModel
                        { Alloy = 100, Ether = 75, BuildTime = 60, ProducedBy = DataType.BUILDING_Neurocyte })
            },
            {
                DataType.UPGRADE_PursuitLigaments,
                new EntityModel(DataType.UPGRADE_PursuitLigaments, EntityType.Tech)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Pursuit Ligaments",
                        Description =
                            """
                            Ichors get more movement speed.
                            """,
                        Descriptive = DescriptiveType.Upgrade
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "R", HotkeyGroup = "X" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_Neurocyte,
                        Requirement = RequirementType.Research_Building
                    })
                    .AddPart(new EntityProductionModel
                        { Alloy = 100, Ether = 100, BuildTime = 80, ProducedBy = DataType.BUILDING_Neurocyte })
            },
            {
                DataType.UPGRADE_ResinantSpeed,
                new EntityModel(DataType.UPGRADE_ResinantSpeed, EntityType.Tech)
                    .AddPart(new EntityInfoModel { Name = "Resinant Speed", Descriptive = DescriptiveType.Upgrade })
                    .AddPart(new EntityHotkeyModel { Hotkey = "F", HotkeyGroup = "X" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_Neurocyte,
                        Requirement = RequirementType.Research_Building
                    })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_AmberWomb,
                        Requirement = RequirementType.Research_Building
                    })
                    .AddPart(new EntityProductionModel
                        { Alloy = 100, Ether = 100, BuildTime = 60, ProducedBy = DataType.BUILDING_Neurocyte })
            },

            {
                DataType.UPGRADE_RootShepherdHidden,
                new EntityModel(DataType.UPGRADE_RootShepherdHidden, EntityType.Tech)
                    .AddPart(new EntityInfoModel
                        { Name = "Root Shepherd Hidden", Descriptive = DescriptiveType.Upgrade })
                    .AddPart(new EntityHotkeyModel { Hotkey = "R", HotkeyGroup = "X", HoldSpace = true })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_Neurocyte,
                        Requirement = RequirementType.Research_Building
                    })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_AmberWomb,
                        Requirement = RequirementType.Research_Building
                    })
                    .AddPart(new EntityProductionModel
                        { Alloy = 100, Ether = 100, BuildTime = 60, ProducedBy = DataType.BUILDING_Neurocyte })
            },

            {
                DataType.UPGRADE_RootShepherdSpeed,
                new EntityModel(DataType.UPGRADE_RootShepherdSpeed, EntityType.Tech)
                    .AddPart(new EntityInfoModel
                        { Name = "Root Shepherd Speed", Descriptive = DescriptiveType.Upgrade })
                    .AddPart(new EntityHotkeyModel { Hotkey = "R", HotkeyGroup = "X", HoldSpace = true })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_Neurocyte,
                        Requirement = RequirementType.Research_Building
                    })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_AmberWomb,
                        Requirement = RequirementType.Research_Building
                    })
                    .AddPart(new EntityProductionModel
                        { Alloy = 100, Ether = 100, BuildTime = 80, ProducedBy = DataType.BUILDING_Neurocyte })
            },


            {
                DataType.UPGRADE_EthericFibers,
                new EntityModel(DataType.UPGRADE_EthericFibers, EntityType.Tech)
                    .AddPart(new EntityInfoModel { Name = "Etheric Fibers", Descriptive = DescriptiveType.Upgrade })
                    .AddPart(new EntityHotkeyModel { Hotkey = "Q", HotkeyGroup = "X" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_Neurocyte,
                        Requirement = RequirementType.Research_Building
                    })
                    .AddPart(new EntityProductionModel
                        { Alloy = 75, Ether = 100, BuildTime = 75, ProducedBy = DataType.BUILDING_Neurocyte })
            },

            {
                DataType.UPGRADE_ObstructingSwarm,
                new EntityModel(DataType.UPGRADE_ObstructingSwarm, EntityType.Tech)
                    .AddPart(new EntityInfoModel { Name = "Obstructing Swarm", Descriptive = DescriptiveType.Upgrade })
                    .AddPart(new EntityHotkeyModel { Hotkey = "E", HotkeyGroup = "X", HoldSpace = true })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_Neurocyte,
                        Requirement = RequirementType.Research_Building
                    })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_AmberWomb,
                        Requirement = RequirementType.Research_Building
                    })
                    .AddPart(new EntityProductionModel
                        { Alloy = 150, Ether = 100, BuildTime = 100, ProducedBy = DataType.BUILDING_Neurocyte })
            },

            {
                DataType.UPGRADE_Hematoma,
                new EntityModel(DataType.UPGRADE_Hematoma, EntityType.Tech)
                    .AddPart(new EntityInfoModel { Name = "Hematoma", Descriptive = DescriptiveType.Upgrade })
                    .AddPart(new EntityHotkeyModel { Hotkey = "E", HotkeyGroup = "X", HoldSpace = true })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_Neurocyte,
                        Requirement = RequirementType.Research_Building
                    })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_AmberWomb,
                        Requirement = RequirementType.Research_Building
                    })
                    .AddPart(new EntityProductionModel
                        { Alloy = 125, Ether = 125, BuildTime = 45, ProducedBy = DataType.BUILDING_Neurocyte })
            },

            {
                DataType.UPGRADE_VitellineCysts,
                new EntityModel(DataType.UPGRADE_VitellineCysts, EntityType.Tech)
                    .AddPart(new EntityInfoModel { Name = "Vitelline Cysts", Descriptive = DescriptiveType.Upgrade })
                    .AddPart(new EntityHotkeyModel { Hotkey = "A", HotkeyGroup = "X", HoldSpace = true })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_DeepNest,
                        Requirement = RequirementType.Research_Building
                    })
                    .AddPart(new EntityProductionModel
                        { Alloy = 200, Ether = 200, BuildTime = 46, ProducedBy = DataType.BUILDING_DeepNest })
            },

            {
                DataType.UPGRADE_HyperAdrenoceptors,
                new EntityModel(DataType.UPGRADE_HyperAdrenoceptors, EntityType.Tech)
                    .AddPart(new EntityInfoModel
                        { Name = "Hyper Adrenoceptors", Descriptive = DescriptiveType.Upgrade })
                    .AddPart(new EntityHotkeyModel { Hotkey = "F", HotkeyGroup = "X", HoldSpace = true })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_DeepNest,
                        Requirement = RequirementType.Research_Building
                    })
                    .AddPart(new EntityProductionModel
                        { Alloy = 100, Ether = 100, BuildTime = 60, ProducedBy = DataType.BUILDING_DeepNest })
            },

            {
                DataType.UPGRADE_EoxBowstring,
                new EntityModel(DataType.UPGRADE_EoxBowstring, EntityType.Tech)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Eox Bowstring",
                        Description = "Increase's the range of the Wraith Bow anti-air attack.",
                        Descriptive = DescriptiveType.Upgrade
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "W", HotkeyGroup = "X", HoldSpace = true })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_Neurocyte,
                        Requirement = RequirementType.Research_Building
                    })
                    .AddPart(new EntityProductionModel
                        { Alloy = 50, Ether = 100, BuildTime = 29, ProducedBy = DataType.BUILDING_Neurocyte })
            },

            {
                DataType.UPGRADE_SporeBurst,
                new EntityModel(DataType.UPGRADE_SporeBurst, EntityType.Tech)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Spore Burst",
                        Description = "Aerovores and Omnivores get area damage vs air units.",
                        Descriptive = DescriptiveType.Upgrade
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "S", HotkeyGroup = "X", HoldSpace = true })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_RootCradle,
                        Requirement = RequirementType.Research_Building
                    })
                    .AddPart(new EntityProductionModel
                        { Alloy = 100, Ether = 150, BuildTime = 64, ProducedBy = DataType.BUILDING_RootCradle })
            },
            {
                DataType.UPGRADE_Ambush,
                new EntityModel(DataType.UPGRADE_Ambush, EntityType.Tech)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Research Ambush",
                        Description =
                            """
                            Bone Stalkers get double damage for a few seconds after attack while Hidden.
                            """,
                        Descriptive = DescriptiveType.Upgrade
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "W", HotkeyGroup = "X", HoldSpace = false })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityProductionModel
                        { Alloy = 100, Ether = 75, BuildTime = 60, ProducedBy = DataType.BUILDING_RedVale })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_RedVale,
                        Requirement = RequirementType.Research_Building
                    })
            },
            {
                DataType.UPGRADE_BloodPlague,
                new EntityModel(DataType.UPGRADE_BloodPlague, EntityType.Tech)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Blood Plague", Descriptive = DescriptiveType.Upgrade,
                        Description = "Unlocks Blood Plague"
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "R", HotkeyGroup = "X", HoldSpace = true })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_RedVale,
                        Requirement = RequirementType.Research_Building
                    })
                    .AddPart(new EntityProductionModel
                        { Alloy = 100, Ether = 150, BuildTime = 100, ProducedBy = DataType.BUILDING_RedVale })
                    .AddPart(new EntityVanguardReplacedModel
                        { ImmortalId = DataType.IMMORTAL_Xol, ReplacedById = DataType.ABILITY_BirthingStorm })
            },
            {
                DataType.UPGRADE_GodphageDamage,
                new EntityModel(DataType.UPGRADE_GodphageDamage, EntityType.Tech)
                    .AddPart(new EntityInfoModel { Name = "Godphage Damage", Descriptive = DescriptiveType.Upgrade })
                    .AddPart(new EntityHotkeyModel { Hotkey = "E", HotkeyGroup = "X" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_DeepNest,
                        Requirement = RequirementType.Research_Building
                    })
                    .AddPart(new EntityProductionModel
                        { Alloy = 250, Ether = 250, BuildTime = 100, ProducedBy = DataType.BUILDING_DeepNest })
            },
            {
                DataType.UPGRADE_BirthingStorm,
                new EntityModel(DataType.UPGRADE_BirthingStorm, EntityType.Tech)
                    .AddPart(new EntityInfoModel { Name = "Birthing Storm", Descriptive = DescriptiveType.Upgrade })
                    .AddPart(new EntityHotkeyModel { Hotkey = "F", HotkeyGroup = "X", HoldSpace = true })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_RedVale,
                        Requirement = RequirementType.Research_Building
                    })
                    .AddPart(new EntityProductionModel
                        { Alloy = 100, Ether = 150, BuildTime = 100, ProducedBy = DataType.BUILDING_RedVale })
                    .AddPart(new EntityVanguardAddedModel
                        { ImmortalId = DataType.IMMORTAL_Mala, ReplaceId = DataType.ABILITY_BloodPlague })
            },

            {
                DataType.UPGRADE_GENERIC_Attack1,
                new EntityModel(DataType.UPGRADE_GENERIC_Attack1, EntityType.Tech)
                    .AddPart(new EntityInfoModel { Name = "Aru Attack Level 1", Descriptive = DescriptiveType.Upgrade })
                    .AddPart(new EntityHotkeyModel { Hotkey = "A", HotkeyGroup = "X", HoldSpace = true })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_RedVale,
                        Requirement = RequirementType.Research_Building
                    })
                    .AddPart(new EntityProductionModel
                        { Alloy = 125, Ether = 125, BuildTime = 114, ProducedBy = DataType.BUILDING_RootCradle })
            },

            {
                DataType.UPGRADE_GENERIC_Defense1,
                new EntityModel(DataType.UPGRADE_GENERIC_Defense1, EntityType.Tech)
                    .AddPart(new EntityInfoModel
                        { Name = "Aru Defense Level 1", Descriptive = DescriptiveType.Upgrade })
                    .AddPart(new EntityHotkeyModel { Hotkey = "S", HotkeyGroup = "X", HoldSpace = true })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_RedVale,
                        Requirement = RequirementType.Research_Building
                    })
                    .AddPart(new EntityProductionModel
                        { Alloy = 125, Ether = 125, BuildTime = 114, ProducedBy = DataType.BUILDING_RootCradle })
            }
        };
    }
}