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

namespace Model.Entity.Data;

public partial class EntityData
{
    public static Dictionary<string, EntityModel> GetBuildingData()
    {
        return new Dictionary<string, EntityModel>
        {
            // Building
            // Q'Rath
            {
                DataType.BUILDING_Acropolis,
                new EntityModel(DataType.BUILDING_Acropolis, EntityType.Building)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Acropolis",
                        Descriptive = DescriptiveType.Stronghold,
                        Description =
                            """
                            Collect Alloy and Ether.<br/>
                            If all your Strongholds are destroyed, you lose the game.
                            """,
                        FlavorText =
                            """
                            "Bereft of Ancient Kin, from My burning heart new mothers shall be made and woven onto 
                            the grateful earth. And within their walls, the righteous shall gather in great number."<br/>
                            —Holy Aros, "Utterances 14.7"
                            """
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "Q", HotkeyGroup = "C" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityProductionModel
                        { Alloy = 450, BuildTime = 90, RequiresWorker = true, ConsumesWorker = true })
                    .AddPart(new EntityVitalityModel
                        { Health = 2300, DefenseLayer = 1200, Armor = ArmorType.Heavy, IsStructure = true })
                    .AddPart(new EntityHarvestModel
                    {
                        HarvestedPerInterval = 1, RequiresWorker = true, Resource = ResourceType.Alloy, Slots = 2,
                        TotalAmount = 3600
                    })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_HallowedGround })
            },
            {
                DataType.BUPGRADE_MiningLevel2_QRath,
                new EntityModel(DataType.BUPGRADE_MiningLevel2_QRath, EntityType.Building_Upgrade)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Mining Level 2", Descriptive = DescriptiveType.Upgrade,
                        Description = "Upgrades the nearest resource cluster to allow more workers to mine from it."
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "Q", HotkeyGroup = "CONTROL" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_Acropolis,
                        Requirement = RequirementType.Morph
                    })
                    .AddPart(new EntityProductionModel { Alloy = 400, BuildTime = 20, RequiresWorker = false })
                    .AddPart(new EntityHarvestModel
                    {
                        HarvestedPerInterval = 1, RequiresWorker = true, Resource = ResourceType.Alloy, Slots = 4,
                        TotalAmount = 3600
                    })
            },
            {
                DataType.CONVERSION_EtherSruge_Aru,
                new EntityModel(DataType.CONVERSION_EtherSruge_Aru, EntityType.Building_Upgrade)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Ether Surge", Descriptive = DescriptiveType.Upgrade,
                        Description = "Gain 100 Ether over 50 seconds"
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "W", HotkeyGroup = "CONTROL" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.STARTING_TownHall_Aru,
                        Requirement = RequirementType.Morph
                    })
                    .AddPart(new EntityProductionModel { Alloy = 50, Cooldown = 50, RequiresWorker = false })
                    .AddPart(new EntityHarvestModel
                    {
                        HarvestedPerInterval = 2, RequiresWorker = false, Resource = ResourceType.Ether, Slots = 1,
                        TotalAmount = 100
                    })
            },
            {
                DataType.CONVERSION_EtherSruge_QRath,
                new EntityModel(DataType.CONVERSION_EtherSruge_QRath, EntityType.Building_Upgrade)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Ether Surge", Descriptive = DescriptiveType.Upgrade,
                        Description = "Gain 100 Ether over 50 seconds"
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "W", HotkeyGroup = "CONTROL" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.STARTING_TownHall_QRath,
                        Requirement = RequirementType.Morph
                    })
                    .AddPart(new EntityProductionModel { Alloy = 50, Cooldown = 50, RequiresWorker = false })
                    .AddPart(new EntityHarvestModel
                    {
                        HarvestedPerInterval = 2, RequiresWorker = false, Resource = ResourceType.Ether, Slots = 1,
                        TotalAmount = 100
                    })
            },

            {
                DataType.BUILDING_ApostleOfBinding,
                new EntityModel(DataType.BUILDING_ApostleOfBinding, EntityType.Building)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Apostle of Binding",
                        Descriptive = DescriptiveType.Economy,
                        Description =
                            """
                            Automatically harvest Ether.
                            """
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "TAB", HotkeyGroup = "C" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityProductionModel { Alloy = 175, BuildTime = 30, RequiresWorker = true })
                    .AddPart(new EntityVitalityModel
                        { Health = 300, DefenseLayer = 200, Armor = ArmorType.Heavy, IsStructure = true })
                    .AddPart(new EntityHarvestModel
                    {
                        HarvestedPerInterval = 1.5625f,
                        RequiresWorker = false,
                        Resource = ResourceType.Ether,
                        Slots = 1,
                        TotalAmount = 1200
                    })
            },
            {
                DataType.BUILDING_LegionHall,
                new EntityModel(DataType.BUILDING_LegionHall, EntityType.Building)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Legion Hall",
                        Descriptive = DescriptiveType.Training,
                        Description =
                            """
                            Trains Sipari, Zephyrs, Magi, and their Vanguard Replacements. Increases Population Capacity.
                            """,
                        FlavorText =
                            """
                            "May the angels' army grow in size. May its many arms grow in strength. And may its soul grow in faith."<br/>
                            —Steel Banner-Lord Sian 
                            """
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "W", HotkeyGroup = "C" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntitySupplyModel { Grants = 16 })
                    .AddPart(new EntityProductionModel { Alloy = 250, BuildTime = 38, RequiresWorker = true })
                    .AddPart(new EntityVitalityModel
                        { Health = 600, DefenseLayer = 600, Armor = ArmorType.Heavy, IsStructure = true })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_HallowedGround })
            },
            {
                DataType.DEFENSE_FireSinger,
                new EntityModel(DataType.DEFENSE_FireSinger, EntityType.Building)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Fire Singer",
                        Descriptive = DescriptiveType.Defense,
                        Description =
                            """
                            Attacks ground/air targets. Does damage over time.
                            """
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "F", HotkeyGroup = "C" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityProductionModel { Alloy = 75, BuildTime = 30, RequiresWorker = true })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_KeeperOfTheHardenedFlames,
                        Requirement = RequirementType.Research_Building
                    })
                    .AddPart(new EntityWeaponModel
                    {
                        Damage = 34, Range = 700, SecondsBetweenAttacks = 1.8f, Targets
                            = TargetType.All
                    })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_HallowedWeapons })
                    .AddPart(new EntityVitalityModel
                        { Health = 350, DefenseLayer = 200, Armor = ArmorType.Heavy, IsStructure = true })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_PsalmOfFire })
            },
            {
                DataType.BUILDING_KeeperOfTheHardenedFlames,
                new EntityModel(DataType.BUILDING_KeeperOfTheHardenedFlames, EntityType.Building)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Keeper Of the Hardened Flames",
                        Descriptive = DescriptiveType.Technology,
                        Description =
                            """
                            Unlocks Attack and Defense Upgrades for all units.<br/>
                            Unlocks Fire Singer building and research.
                            """
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "TAB", HoldSpace = true, HotkeyGroup = "C" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityProductionModel { Alloy = 100, BuildTime = 30, RequiresWorker = true })
                    .AddPart(new EntityVitalityModel
                        { Health = 625, DefenseLayer = 625, Armor = ArmorType.Heavy, IsStructure = true })
            },
            {
                DataType.BUILDING_Reliquary,
                new EntityModel(DataType.BUILDING_Reliquary, EntityType.Building)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Reliquary", Descriptive = DescriptiveType.Technology,
                        Description =
                            """
                            Unlocks training of Magi and their Vanguard replacements.<br/>
                            Unlocks research for Sipari and their Vanguard replacements.
                            """
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "W", HoldSpace = true, HotkeyGroup = "C" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityProductionModel
                        { Alloy = 100, Ether = 25, BuildTime = 30, RequiresWorker = true })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_LegionHall,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityVitalityModel
                        { Health = 700, DefenseLayer = 700, Armor = ArmorType.Heavy, IsStructure = true })
            },

            {
                DataType.BUILDING_MonasteryOfIzur,
                new EntityModel(DataType.BUILDING_MonasteryOfIzur, EntityType.Building)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Monastery of Izur",
                        Descriptive = DescriptiveType.Technology,
                        Description =
                            """
                            Unlocks training of Zephyrs and their Vanguard replacements.<br/>
                            Unlocks research for Zephyrs and their Vanguard replacements.
                            """
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "W", HoldSpace = true, HotkeyGroup = "C" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityProductionModel
                        { Alloy = 100, Ether = 50, BuildTime = 30, RequiresWorker = true })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_LegionHall,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityVitalityModel
                        { Health = 700, DefenseLayer = 700, Armor = ArmorType.Heavy, IsStructure = true })
            },


            {
                DataType.BUILDING_SoulFoundry,
                new EntityModel(DataType.BUILDING_SoulFoundry, EntityType.Building)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Soul Foundry",
                        Descriptive = DescriptiveType.Training,
                        Description =
                            """
                            Trains Hallowers, Castigators, Absolvers, and their Vanguard replacements. Increases Population Capacity.
                            """
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "E", HotkeyGroup = "C" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityProductionModel
                        { Alloy = 250, Ether = 100, BuildTime = 42, RequiresWorker = true })
                    .AddPart(new EntitySupplyModel { Grants = 16 })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_LegionHall,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityVitalityModel
                        { Health = 900, DefenseLayer = 900, Armor = ArmorType.Heavy, IsStructure = true })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_HallowedGround })
            },
            {
                DataType.BUILDING_HouseOfFadingSaints,
                new EntityModel(DataType.BUILDING_HouseOfFadingSaints, EntityType.Building)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "House of the Fading Saints",
                        Descriptive = DescriptiveType.Technology,
                        Description =
                            """
                            Unlocks training of Hallowers and their Vanguard replacements.
                            """,
                        FlavorText =
                            """
                            "And soul pases unto the horizon, joining to the Holiest of Holies and the Host of Heaven."<br/>
                            — Ceremony of the Passing
                            """
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "E", HoldSpace = true, HotkeyGroup = "C" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityProductionModel
                        { Alloy = 100, Ether = 100, BuildTime = 45, RequiresWorker = true })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_SoulFoundry,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityVitalityModel
                        { Health = 500, DefenseLayer = 500, Armor = ArmorType.Heavy, IsStructure = true })
            },
            {
                DataType.BUILDING_Angelarium,
                new EntityModel(DataType.BUILDING_Angelarium, EntityType.Building)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Angelarium",
                        Descriptive = DescriptiveType.Training,
                        Description =
                            """
                            Trains Sentinels, Wardens, Thrones, Shar'U and their Vanguard replacements. Increases Population Capacity.
                            """
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "R", HotkeyGroup = "C" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityProductionModel
                        { Alloy = 250, Ether = 150, BuildTime = 42, RequiresWorker = true })
                    .AddPart(new EntitySupplyModel { Grants = 16 })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_SoulFoundry,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityVitalityModel
                        { Health = 950, DefenseLayer = 950, Armor = ArmorType.Heavy, IsStructure = true })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_HallowedGround })
            },
            {
                DataType.BUILDING_EyeOfAros,
                new EntityModel(DataType.BUILDING_EyeOfAros, EntityType.Building)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Eye of Aros",
                        Descriptive = DescriptiveType.Technology,
                        Description =
                            """
                            Unlocks training of Shar'U.<br/>
                            Unlocks research for Sipari, Shar'U, and their Vanguard replacements.
                            """,
                        FlavorText =
                            """
                            "Where My gaze shall fall, blessed son and sun of Mine, you shall go forth 
                            and claim in Our Holy Cause. For you are My Lance and My Rook, and you shall never fail me."<br/>
                            —Holy Aros to Orzum
                            """
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "F", HoldSpace = true, HotkeyGroup = "C" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityProductionModel
                        { Alloy = 200, Ether = 250, BuildTime = 60, RequiresWorker = true })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_Angelarium,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityVitalityModel
                        { Health = 550, DefenseLayer = 550, Armor = ArmorType.Heavy, IsStructure = true })
            },
            {
                DataType.BUILDING_BearerOfTheCrown,
                new EntityModel(DataType.BUILDING_BearerOfTheCrown, EntityType.Building)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Bearer of the Crown",
                        Descriptive = DescriptiveType.Technology,
                        Description =
                            """
                            Unlocks training of Thrones.<br/>
                            Unlocks research for: Thrones, Wardens, and their vanguard replacements.
                            """
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "R", HoldSpace = true, HotkeyGroup = "C" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityProductionModel
                        { Alloy = 250, Ether = 250, BuildTime = 70, RequiresWorker = true })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_Angelarium,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityVitalityModel
                        { Health = 625, DefenseLayer = 625, Armor = ArmorType.Heavy, IsStructure = true })
            },
            // Building
            // Aru
            {
                DataType.BUILDING_GroveHeart,
                new EntityModel(DataType.BUILDING_GroveHeart, EntityType.Building)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Grove Heart", Descriptive = DescriptiveType.Stronghold,
                        Description =
                            """
                            Collect Alloy and Ether.<br/>
                            If all your Strongholds are destroyed, you lose the game.
                            """
                    }) //TODO: Add Alloy, Ether and Pyre, Supply to the database
                    .AddPart(new EntityHotkeyModel { Hotkey = "F", HotkeyGroup = "C" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityProductionModel { Alloy = 500, BuildTime = 90, RequiresWorker = true })
                    .AddPart(new EntityVitalityModel
                    {
                        Health = 2000, DefenseLayer = 400, Defense = DefenseType.Overgrowth, Armor = ArmorType.Heavy,
                        IsStructure = true
                    })
                    .AddPart(new EntityHarvestModel
                    {
                        HarvestedPerInterval = 1, RequiresWorker = true, Resource = ResourceType.Alloy, Slots = 2,
                        TotalAmount = 3600
                    })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_Rootway })
            },
            {
                DataType.BUPGRADE_GodHeart,
                new EntityModel(DataType.BUPGRADE_GodHeart, EntityType.Building_Upgrade)
                    .AddPart(new EntityInfoModel { Name = "God Heart", Descriptive = DescriptiveType.Upgrade })
                    .AddPart(new EntityHotkeyModel { Hotkey = "A", HotkeyGroup = "CONTROL" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityVitalityModel
                        { Health = 3100, DefenseLayer = 900, Armor = ArmorType.Heavy, IsStructure = true })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.STARTING_TownHall_Aru,
                        Requirement = RequirementType.Morph
                    })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_AltarOfTheWorthy,
                        Requirement = RequirementType.Research_Building
                    })
                    .AddPart(new EntityProductionModel
                        { Alloy = 200, Ether = 100, BuildTime = 60, RequiresWorker = false })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_Rootway })
            },
            {
                DataType.BUPGRADE_MiningLevel2_Aru,
                new EntityModel(DataType.BUPGRADE_MiningLevel2_Aru, EntityType.Building_Upgrade)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Mining Level 2", Descriptive = DescriptiveType.Upgrade,
                        Description = "Upgrades the nearest resource cluster to allow more workers to mine from it."
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "Q", HotkeyGroup = "CONTROL" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_GroveHeart,
                        Requirement = RequirementType.Morph
                    })
                    .AddPart(new EntityProductionModel { Alloy = 400, BuildTime = 20, RequiresWorker = false })
                    .AddPart(new EntityHarvestModel
                    {
                        HarvestedPerInterval = 1, RequiresWorker = true, Resource = ResourceType.Alloy, Slots = 2,
                        TotalAmount = 3600
                    })
            },
            {
                DataType.BUILDING_EtherMaw,
                new EntityModel(DataType.BUILDING_EtherMaw, EntityType.Building)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Ether Maw",
                        Descriptive = DescriptiveType.Economy,
                        Description = "Automatically harvest Ether.",
                        FlavorText =
                            """
                            "The Matriarchs tell of where the ether goes. ARound Lacuathon's trunk swirls a great aurora of 
                            this world's lifeblood, flowing upwards into the half-eaten sky."<br/>
                            —Hunter Ipotzil
                            """
                    }) //TODO Add Ether Node to database
                    .AddPart(new EntityHotkeyModel { Hotkey = "TAB", HotkeyGroup = "C" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityProductionModel { Alloy = 225, BuildTime = 30, RequiresWorker = true })
                    .AddPart(new EntityVitalityModel
                        { Health = 400, DefenseLayer = 225, Armor = ArmorType.Heavy, IsStructure = true })
                    .AddPart(new EntityHarvestModel
                    {
                        HarvestedPerInterval = 1.5625f, RequiresWorker = false, Resource = ResourceType.Ether,
                        Slots = 1, TotalAmount = 1200
                    })
            },
            {
                DataType.BUILDING_AltarOfTheWorthy,
                new EntityModel(DataType.BUILDING_AltarOfTheWorthy, EntityType.Building)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Altar of the Worthy",
                        Descriptive = DescriptiveType.Training,
                        Description =
                            """
                            Trains Masked Hunters, Xacal, Underspins, Ichors, and their Vanguard replacements. Increases Population Capacity.
                            """
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "W", HotkeyGroup = "C" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntitySupplyModel { Grants = 16 })
                    .AddPart(new EntityProductionModel { Alloy = 300, BuildTime = 38, RequiresWorker = true })
                    .AddPart(new EntityVitalityModel
                        { Health = 1000, DefenseLayer = 500, Armor = ArmorType.Heavy, IsStructure = true })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_Rootway })
            },
            {
                DataType.BUILDING_Neurocyte,
                new EntityModel(DataType.BUILDING_Neurocyte, EntityType.Building)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Neurocyte",
                        Descriptive = DescriptiveType.Technology,
                        Description =
                            """
                            Unlocks training of Xacal, Underspines, Red Seers, Brood Anchors, Aarox, Behemoths, and their 
                            Vanguard replacements.
                            """
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "F", HoldSpace = true, HotkeyGroup = "C" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityProductionModel
                        { Alloy = 100, Ether = 75, BuildTime = 30, RequiresWorker = true })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_AltarOfTheWorthy,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityVitalityModel
                        { Health = 800, DefenseLayer = 200, Armor = ArmorType.Heavy, IsStructure = true })
            },
            {
                DataType.BUILDING_RootCradle,
                new EntityModel(DataType.BUILDING_RootCradle, EntityType.Building)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Root Cradle",
                        Descriptive = DescriptiveType.Technology,
                        Description = "Unlocks Attack and Defense Upgrades for all units.",
                        FlavorText =
                            """
                            Grinding and deep, Laculathon's Rootsong speaks of a time fast apporaching where the Worthy 
                            shall rise and pierce the heart of the Wretched Sun.
                            """
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "Tab", HoldSpace = true, HotkeyGroup = "C" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityProductionModel
                        { Alloy = 150, Ether = 0, BuildTime = 30, RequiresWorker = true })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_AltarOfTheWorthy,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityVitalityModel
                        { Health = 900, DefenseLayer = 300, Armor = ArmorType.Heavy, IsStructure = true })
            },
            {
                DataType.DEFENSE_Aerovore,
                new EntityModel(DataType.DEFENSE_Aerovore, EntityType.Building)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Aerovore",
                        Descriptive = DescriptiveType.Defense,
                        Description = "Attacks air targets."
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "Q", HotkeyGroup = "C" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityProductionModel { Alloy = 75, BuildTime = 18, RequiresWorker = true })
                    .AddPart(new EntityVitalityModel
                        { Health = 300, DefenseLayer = 150, Armor = ArmorType.Heavy, IsStructure = true })
                    .AddPart(new EntityWeaponModel
                        { Damage = 65, Range = 700, SecondsBetweenAttacks = 1.35f, Targets = TargetType.Air })
            },
            {
                DataType.BUPGRADE_Omnivore,
                new EntityModel(DataType.BUPGRADE_Omnivore, EntityType.Building_Upgrade)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Omnivore",
                        Descriptive = DescriptiveType.Upgrade,
                        Description = "Attacks ground/air targets."
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "Q", HotkeyGroup = "SHIFT" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.DEFENSE_Aerovore,
                        Requirement = RequirementType.Morph
                    })
                    .AddPart(new EntityProductionModel { Alloy = 75, BuildTime = 18, RequiresWorker = false })
                    .AddPart(new EntityVitalityModel
                        { Health = 400, DefenseLayer = 150, Armor = ArmorType.Heavy, IsStructure = true })
                    .AddPart(new EntityWeaponModel
                        { Damage = 65, Range = 700, SecondsBetweenAttacks = 1.35f, Targets = TargetType.Air })
                    .AddPart(new EntityWeaponModel
                    {
                        Damage = 52, MediumDamage = 61, HeavyDamage = 70, Range = 700, SecondsBetweenAttacks = 1.35f,
                        Targets = TargetType.Ground
                    })
            },
            {
                DataType.BUILDING_AmberWomb,
                new EntityModel(DataType.BUILDING_AmberWomb, EntityType.Building)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Amber Womb",
                        Descriptive = DescriptiveType.Training,
                        Description =
                            """
                            Trains Wraith Bows, Brood Anchors, and their Vanguard replacements. Increases Population Capacity.
                            """
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "E", HotkeyGroup = "C" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityProductionModel
                        { Alloy = 300, Ether = 100, BuildTime = 42, RequiresWorker = true })
                    .AddPart(new EntitySupplyModel { Grants = 16 })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_AltarOfTheWorthy,
                        Requirement = RequirementType.Research_Building
                    })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUPGRADE_GodHeart,
                        Requirement = RequirementType.Research_Building
                    })
                    .AddPart(new EntityVitalityModel
                        { Health = 1000, DefenseLayer = 600, Armor = ArmorType.Heavy, IsStructure = true })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_Rootway })
            },
            {
                DataType.BUILDING_BoneCanopy,
                new EntityModel(DataType.BUILDING_BoneCanopy, EntityType.Building)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Bone Canopy",
                        Descriptive = DescriptiveType.Training,
                        Description =
                            """
                            Trains Aarox, Thrums, Behemoths, and their Vanguard replacements. Increases Population Capacity.
                            """
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "R", HotkeyGroup = "C" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityProductionModel
                        { Alloy = 300, Ether = 150, BuildTime = 42, RequiresWorker = true })
                    .AddPart(new EntitySupplyModel { Grants = 16 })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUPGRADE_GodHeart,
                        Requirement = RequirementType.Research_Building
                    })
                    .AddPart(new EntityVitalityModel
                        { Health = 1100, DefenseLayer = 650, Armor = ArmorType.Heavy, IsStructure = true })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_Rootway })
            },
            {
                DataType.BUILDING_MurderHollow,
                new EntityModel(DataType.BUILDING_MurderHollow, EntityType.Building)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Murder Hollow", Descriptive = DescriptiveType.Technology,
                        Description =
                            """
                            Unlocks Ichor training and research.
                            """,
                        FlavorText =
                            """
                            "Foolish Otapeke thought himself the master of Her children. Now he eases the acid 
                            in their bellies. Stay for from the Hollow when they howl like that."<br/>
                            —Huntmaster Etatzli to his initiates
                            """
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "W", HoldSpace = true, HotkeyGroup = "C" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityProductionModel
                        { Alloy = 75, Ether = 50, BuildTime = 45, RequiresWorker = true })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_AltarOfTheWorthy,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityVitalityModel
                        { Health = 1000, DefenseLayer = 400, Armor = ArmorType.Heavy, IsStructure = true })
            },
            {
                DataType.BUILDING_RedVale,
                new EntityModel(DataType.BUILDING_RedVale, EntityType.Building)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Red Vale",
                        Descriptive = DescriptiveType.Technology,
                        Description =
                            """
                            Unlock training of Red Seer and their Vanguard replacements.
                            """
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "E", HoldSpace = true, HotkeyGroup = "C" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityProductionModel
                        { Alloy = 150, Ether = 175, BuildTime = 60, RequiresWorker = true })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_AltarOfTheWorthy,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityVitalityModel
                        { Health = 1000, DefenseLayer = 500, Armor = ArmorType.Heavy, IsStructure = true })
            },
            {
                DataType.BUILDING_DeepNest,
                new EntityModel(DataType.BUILDING_DeepNest, EntityType.Building)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Deep Nest",
                        Descriptive = DescriptiveType.Technology,
                        Description =
                            """
                            Unlock training of Behemoth and their Vanguard replacements.
                            """
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "R", HoldSpace = true, HotkeyGroup = "C" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityProductionModel
                        { Alloy = 225, Ether = 175, BuildTime = 70, RequiresWorker = true })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_BoneCanopy,
                        Requirement = RequirementType.Research_Building
                    })
                    .AddPart(new EntityVitalityModel
                        { Health = 1000, DefenseLayer = 500, Armor = ArmorType.Heavy, IsStructure = true })
            }
        };
    }
}