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> GetImmortalData()
    {
        return new Dictionary<string, EntityModel>
        {
            // Immortals
            // Aru
            {
                DataType.IMMORTAL_Atzlan,
                new EntityModel(DataType.IMMORTAL_Atzlan, EntityType.Immortal)
                    .AddPart(new EntityInfoModel { Name = "Atzlan" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityHarvestModel
                    {
                        Resource = ResourceType.Pyre, HarvestedPerInterval = 1, HarvestDelay = 3,
                        RequiresWorker = false, Slots = 1, TotalAmount = -1
                    })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.IPASSIVE_GreenThumb })
                    .AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_SummonGroveGuardian })
                    .AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_ProphetOfTheRoots })
                    .AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_WallOfRoots })
                    .AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_SummonDeepWyrm })
                    .AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_SummonRootBud })
                    .AddPart(new EntityIdVanguardModel { Id = DataType.VANGUARD_RootShepard_Atzlan })
                    .AddPart(new EntityIdVanguardModel { Id = DataType.VANGUARD_Resinant_Atzlan })
            },
            {
                DataType.IMMORTAL_Mala,
                new EntityModel(DataType.IMMORTAL_Mala, EntityType.Immortal)
                    .AddPart(new EntityInfoModel { Name = "Mala" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityHarvestModel
                    {
                        Resource = ResourceType.Pyre, HarvestedPerInterval = 1, HarvestDelay = 3,
                        RequiresWorker = false, Slots = 1, TotalAmount = -1
                    })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.IPASSIVE_MothersHunger })
                    .AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_SummonGroveGuardian })
                    .AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_RedHarvest })
                    .AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_ProphetsFavor })
                    .AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_RainOfBlood })
                    .AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_ConstructBloodWell })
                    .AddPart(new EntityIdVanguardModel { Id = DataType.VANGUARD_Incubator_Mala })
                    .AddPart(new EntityIdVanguardModel { Id = DataType.VANGUARD_DreadSister_Mala })
            },
            {
                DataType.IMMORTAL_Xol,
                new EntityModel(DataType.IMMORTAL_Xol, EntityType.Immortal)
                    .AddPart(new EntityInfoModel { Name = "Xol" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityHarvestModel
                    {
                        Resource = ResourceType.Pyre, HarvestedPerInterval = 1, HarvestDelay = 3,
                        RequiresWorker = false, Slots = 1, TotalAmount = -1
                    })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.IPASSIVE_StalkersSense })
                    .AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_SummonGroveGuardian })
                    .AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_ProphetOfTheHunt })
                    .AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_HuntingGrounds })
                    .AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_TheGreatHunt })
                    .AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_ConstructBloodWell })
                    .AddPart(new EntityIdVanguardModel { Id = DataType.VANGUARD_BoneStalker_Xol })
                    .AddPart(new EntityIdVanguardModel { Id = DataType.VANGUARD_WhiteWoodReaper_Xol })
            },
            // Immortals
            // Q'Rath
            {
                DataType.IMMORTAL_Ajari,
                new EntityModel(DataType.IMMORTAL_Ajari, EntityType.Immortal)
                    .AddPart(new EntityInfoModel { Name = "Ajari" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityHarvestModel
                    {
                        Resource = ResourceType.Pyre, HarvestedPerInterval = 1, HarvestDelay = 3,
                        RequiresWorker = false, Slots = 1, TotalAmount = -1
                    })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.IPASSIVE_MendingGrace })
                    .AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_SummonCitadel })
                    .AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_HeavensAegis })
                    .AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_DeliverFromEvil })
                    .AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_Salvation })
                    .AddPart(new EntityIdVanguardModel { Id = DataType.VANGUARD_Saoshin_Ajari })
                    .AddPart(new EntityIdVanguardModel { Id = DataType.VANGUARD_ArkMother_Ajari })
            },
            {
                DataType.IMMORTAL_Orzum,
                new EntityModel(DataType.IMMORTAL_Orzum, EntityType.Immortal)
                    .AddPart(new EntityInfoModel { Name = "Orzum" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityHarvestModel
                    {
                        Resource = ResourceType.Pyre, HarvestedPerInterval = 1, HarvestDelay = 3,
                        RequiresWorker = false, Slots = 1, TotalAmount = -1
                    })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.IPASSIVE_OrdainedConquest })
                    .AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_RookOfIra })
                    .AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_SummonCitadel })
                    .AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_EmpireUnbroken })
                    .AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_PillarOfHeaven })
                    .AddPart(new EntityIdVanguardModel { Id = DataType.VANGUARD_Zentari_Orzum })
                    .AddPart(new EntityIdVanguardModel { Id = DataType.VANGUARD_Sceptre_Orzum })
            },

            // Immortal Passives
            {
                DataType.IPASSIVE_MendingGrace,
                new EntityModel(DataType.IPASSIVE_MendingGrace, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Mending Grace",
                        Description =
                            "Friendly units heal on Hallowed Ground. Units get an initial burst of healing after a delay, then heal over time."
                    })
            },
            {
                DataType.IPASSIVE_OrdainedConquest,
                new EntityModel(DataType.IPASSIVE_OrdainedConquest, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Ordained Conquest",
                        Description =
                            """
                            Citadels generate Pyre passively. Execute towers below 20% HP.
                            """
                    })
            },
            {
                DataType.IPASSIVE_MothersHunger,
                new EntityModel(DataType.IPASSIVE_MothersHunger, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Mother's Hunger",
                        Description =
                            """
                            Units that die near Blood Wells, Grove Guardians, Incubators, Dread Sisters, Mala's Specter, 
                            and units that dies during Rain of Blood give Sacral Blood.
                            """
                    })
            },
            {
                DataType.IPASSIVE_StalkersSense,
                new EntityModel(DataType.IPASSIVE_StalkersSense, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Stalker's Sense",
                        Description = "Increases the vision range of your units by 1."
                    })
            },
            {
                DataType.IPASSIVE_GreenThumb,
                new EntityModel(DataType.IPASSIVE_GreenThumb, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Green Thumb",
                        Description = "Friendly units near Atzlan heal over time."
                    })
            },


            // Pyre Spells
            // Q'Rath
            {
                DataType.ISPELL_SummonCitadel,
                new EntityModel(DataType.ISPELL_SummonCitadel, EntityType.Pyre_Spell)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Summon Citadel",
                        Description =
                            """
                            Target a Phyric Foundation. Summon a Citadel.<br/>
                            Can attack ground and air. Heals friendly units. Does not require a worker.
                            """
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "Q", HotkeyGroup = "V" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityProductionModel { Pyre = 50, BuildTime = 70 })
                    .AddPart(new EntityVitalityModel
                        { Health = 1000, DefenseLayer = 500, Armor = ArmorType.Heavy, IsStructure = true })
                    .AddPart(new EntityWeaponModel
                    {
                        Damage = 20, Range = 800, AttacksPerSecond = 1.124f, Targets = TargetType.All,
                        MediumDamage = 25, HeavyDamage = 30
                    })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_Respite })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_HallowedGround })
            },
            // Orzum
            {
                DataType.ISPELL_RookOfIra,
                new EntityModel(DataType.ISPELL_RookOfIra, EntityType.Pyre_Spell)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Rook of Ira",
                        Description =
                            "Target a location to summon a Rook of Ira."
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "E", HotkeyGroup = "V" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityVanguardAddedModel { ImmortalId = DataType.IMMORTAL_Orzum })
                    .AddPart(new EntityProductionModel { Pyre = 125, Cooldown = 90, BuildTime = 3 })
            },
            {
                DataType.ISPELL_EmpireUnbroken,
                new EntityModel(DataType.ISPELL_EmpireUnbroken, EntityType.Pyre_Spell)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Empire Unbroken",
                        Description =
                            """
                            Targe an area. Buildings get damage reduction then heal.<br/>
                            Temporary. Healing happens at the end of the spell.<br/>
                            Temporarily turns Citadels into Rooks of Ira.
                            """
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "W", HotkeyGroup = "V" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityVanguardAddedModel { ImmortalId = DataType.IMMORTAL_Orzum })
                    .AddPart(new EntityProductionModel { Pyre = 50, Cooldown = 120 })
            },
            {
                DataType.ISPELL_PillarOfHeaven,
                new EntityModel(DataType.ISPELL_PillarOfHeaven, EntityType.Pyre_Spell)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Pillar of the Heavens",
                        Description =
                            """
                            Target an area to deal massive area damage.<br/>
                            Creates temporary <b>Hallowed Ground</b> that improves friendly unit attack speed.
                            """
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "R", HotkeyGroup = "V" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityVanguardAddedModel { ImmortalId = DataType.IMMORTAL_Orzum })
                    .AddPart(new EntityProductionModel { Pyre = 150, Cooldown = 120 })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_Zeal })
            },
            // Ajari
            {
                DataType.ISPELL_HeavensAegis,
                new EntityModel(DataType.ISPELL_HeavensAegis, EntityType.Pyre_Spell)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Heaven's Aegis",
                        Description =
                            """
                            Target a friendly unit. It gets movement speed and Shields.<br/>
                            Periodically saves charges, up to a cap.
                            """
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "W", HotkeyGroup = "V" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityVanguardAddedModel { ImmortalId = DataType.IMMORTAL_Ajari })
                    .AddPart(new EntityProductionModel { Pyre = 25, Cooldown = 0.5f })
            },
            {
                DataType.ISPELL_DeliverFromEvil,
                new EntityModel(DataType.ISPELL_DeliverFromEvil, EntityType.Pyre_Spell)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Deliver from Evil",
                        Description =
                            """
                            Target an area. Friendly units teleport to your nearest Acropolis.<br/>
                            Units get Shields for a few seconds before teleporting.
                            """
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "E", HotkeyGroup = "V" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityVanguardAddedModel { ImmortalId = DataType.IMMORTAL_Ajari })
                    .AddPart(new EntityProductionModel { Pyre = 50, Cooldown = 60 })
            },
            {
                DataType.ISPELL_Salvation,
                new EntityModel(DataType.ISPELL_Salvation, EntityType.Pyre_Spell)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Salvation",
                        Description =
                            """
                            Target a location. Summon Ajari's Specter to prevent death.<br/>
                            Saved units are brought back to Ajari's location at the end of the duration. Destroying Ajari's
                            Urn ends the effect and prevents Saved units from coming back.
                            """
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "R", HotkeyGroup = "V" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityVanguardAddedModel { ImmortalId = DataType.IMMORTAL_Ajari })
                    .AddPart(new EntityProductionModel { Pyre = 175, Cooldown = 45 })
            },
            // Immortal Spells
            // Aru
            {
                DataType.ISPELL_SummonGroveGuardian,
                new EntityModel(DataType.ISPELL_SummonGroveGuardian, EntityType.Pyre_Spell)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Summon Grove Guardian",
                        Description = "Creates a powerful defensive structure on a Tower Foundation."
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "Q", HotkeyGroup = "V" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityProductionModel { Pyre = 50, BuildTime = 70 })
                    .AddPart(new EntityVitalityModel
                        { Health = 1850, DefenseLayer = 450, Armor = ArmorType.Heavy, IsStructure = true })
                    .AddPart(new EntityWeaponModel
                        { Damage = 19, Range = 800, AttacksPerSecond = 1.887f, Targets = TargetType.All })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_Respite })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_Rootway })
            },
            {
                DataType.ISPELL_ConstructBloodWell,
                new EntityModel(DataType.ISPELL_ConstructBloodWell, EntityType.Pyre_Spell)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Construct Blood Well",
                        Description =
                            "Creates a rootway generating structure that heals nearby allied units, and transfers it's blood to nearby allied units."
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "F", HotkeyGroup = "V" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityProductionModel { Pyre = 25, Cooldown = 21, BuildTime = 3 })
                    .AddPart(new EntityVitalityModel
                        { Health = 400, Energy = 100, DefenseLayer = 50, Armor = ArmorType.Heavy, IsStructure = true })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_RestoreLifeblood })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_Transfusion })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_Rootway })
            },
            // Atzlan
            {
                DataType.ISPELL_ProphetOfTheRoots,
                new EntityModel(DataType.ISPELL_ProphetOfTheRoots, EntityType.Pyre_Spell)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Prophet Of The Roots",
                        Description =
                            "Moves Atzlan to target Root Bud. Blesses the Root Bud to give units nearby more overgrowth Atzlan heals nearby units."
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "W", HotkeyGroup = "V" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityProductionModel { Pyre = 25, Cooldown = 3 })
                    .AddPart(new EntityVitalityModel
                        { Health = 25, DefenseLayer = 50, Armor = ArmorType.Heavy, IsStructure = true })
            },
            {
                DataType.ISPELL_WallOfRoots,
                new EntityModel(DataType.ISPELL_WallOfRoots, EntityType.Pyre_Spell)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Wall of Roots",
                        Description =
                            """
                            Spawn a Wall of Roots that blocks ground pathing.<br/>
                            Click and drag to "draw" the wall. Wall takes damage over time when it's off rootway.
                            """
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "E", HotkeyGroup = "V" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityProductionModel { Pyre = 50, Cooldown = 10 })
                    .AddPart(new EntityVitalityModel
                        { Health = 25, DefenseLayer = 50, Armor = ArmorType.Heavy, IsStructure = true })
            },

            {
                DataType.ISPELL_SummonDeepWyrm,
                new EntityModel(DataType.ISPELL_SummonDeepWyrm, EntityType.Pyre_Spell)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Summon Deep Wyrm",
                        Description =
                            """
                            The Deep Wyrm roams in the area and attacks any ground enemy unit entering the rootway.<br/>
                            Spawns rootway on summon. The Deep Wyrm is invulnerable and uncontrollable.
                            """
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "R", HotkeyGroup = "V" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityProductionModel { Pyre = 150, Cooldown = 55 })
                    .AddPart(new EntityVitalityModel
                        { Health = 25, DefenseLayer = 50, Armor = ArmorType.Heavy, IsStructure = true })
            },

            {
                DataType.ISPELL_SummonRootBud,
                new EntityModel(DataType.ISPELL_SummonRootBud, EntityType.Pyre_Spell)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Summon Root Bud",
                        Description =
                            """
                            Generates Rootway<br/>
                            Must be placed on Rootway and in range of another Root Bud or Stronghold
                            """
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "F", HotkeyGroup = "V" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityProductionModel { Cooldown = 25 })
                    .AddPart(new EntityVitalityModel
                        { Health = 25, DefenseLayer = 50, Armor = ArmorType.Heavy, IsStructure = true })
            },


            // Mala
            {
                DataType.ISPELL_RedHarvest,
                new EntityModel(DataType.ISPELL_RedHarvest, EntityType.Pyre_Spell)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Red Harvest",
                        Description =
                            """
                            Target a location to summon Mala's Specter.<br/>
                            Nearby units make Quitl and give Sacral Blood on-death.
                            """
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "W", HotkeyGroup = "V" })
                    .AddPart(new EntityVanguardAddedModel { ImmortalId = DataType.IMMORTAL_Mala })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityProductionModel { Pyre = 75, Cooldown = 90 })
            },
            {
                DataType.ISPELL_ProphetsFavor,
                new EntityModel(DataType.ISPELL_ProphetsFavor, EntityType.Pyre_Spell)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Prophet's Favor",
                        Description =
                            """
                            Target an area. Permanently empower units.<br/>
                            Empowered units get more HP and damage. Does not stack.<br/>
                            Costs Sacral Blood. Get Sacral Blood from Mala's other Powers and Vanguard.
                            """
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "E", HotkeyGroup = "V" })
                    .AddPart(new EntityVanguardAddedModel { ImmortalId = DataType.IMMORTAL_Mala })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityProductionModel { Cooldown = 5 })
            },
            {
                DataType.ISPELL_RainOfBlood,
                new EntityModel(DataType.ISPELL_RainOfBlood, EntityType.Pyre_Spell)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Rain of Blood",
                        Description =
                            "Rains blood from the sky for 30 seconds. Massively increases global life regeneration for allied troops. Allies anywhere also have significantly increased blood regeneration."
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "R", HotkeyGroup = "V" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityVanguardAddedModel { ImmortalId = DataType.IMMORTAL_Mala })
                    .AddPart(new EntityProductionModel { Pyre = 150, Cooldown = 30 })
            },
            // Xol
            {
                DataType.ISPELL_ProphetOfTheHunt,
                new EntityModel(DataType.ISPELL_ProphetOfTheHunt, ImmortalSpellType.Combat)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Prophet Of The Hunt",
                        Description =
                            """
                            Target a location to summon Xol.

                            Get XP by assiting in kills. Level up to become more powerful.
                            """,
                        Notes =
                            " - Summons Xol (stealthed) after a 1 second delay.<br/>      - Xol has 225 Life, 75 Shield, 410 Move speed, 70 Radius.<br/>      - Xol has a weapon: 28 Damage, 1s Cooldown, 7 Range, Ground and Air.<br/>      - Every 4 attacks, the next attack will deal 22 bonus damage.<br/>"
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "W", HotkeyGroup = "V" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityVanguardAddedModel { ImmortalId = DataType.IMMORTAL_Xol })
                    .AddPart(new EntityProductionModel { Cooldown = 50, Pyre = 50 })
            },
            {
                DataType.ISPELL_HuntingGrounds,
                new EntityModel(DataType.ISPELL_HuntingGrounds, ImmortalSpellType.Combat)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Hunting Grounds",
                        Description =
                            """
                            Target an area. Friendly units there become Hidden. 

                            After becoming Hidden, friendly units get more movement speed, attack speed, and damage on their first attack.
                            Hunting Grounds disappears 5 seconds after a unit inside attacks.
                            """,
                        Notes =
                            "  - After a 10 second delay, creates a large ambush area which lasts until after an ambush is sprung.<br/>  - Units in the Hunting Ground become stealth.<br/>  - Stealth units will deal double damage on the first attack and spring the ambush.<br/>  - The Hunting Ground will disappear 5 seconds after an ambush is sprung.<br/>  - Units can only get the bonus once."
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "E", HotkeyGroup = "V" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityVanguardAddedModel { ImmortalId = DataType.IMMORTAL_Xol })
                    .AddPart(new EntityProductionModel { Cooldown = 10, Pyre = 25 })
            },
            {
                DataType.ISPELL_TheGreatHunt,
                new EntityModel(DataType.ISPELL_TheGreatHunt, EntityType.Pyre_Spell)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "The Great Hunt",
                        Description =
                            """
                            Activate to reduce enemy vision range and give friendly units movement speed.
                            Affects all units. Friendly units get attack speed on-kill
                            """,
                        Notes =
                            "  - Reduces enemy vision to 6 range (used to be 3).<br/>  - After a 3 second delay, the hunt begins. The hunt lasts 20 seconds.<br/>  - Summons Xol (moveable) to lead the hunt.<br/>  - Units gain a 70% decaying move speed bonus for 6 seconds.<br/>  - While on the hunt killing an enemy will cause a frenzy giving the killer double attack speed for 7 seconds <br/>  - Adds duration timer to Xol"
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "R", HotkeyGroup = "V" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityVanguardAddedModel { ImmortalId = DataType.IMMORTAL_Xol })
                    .AddPart(new EntityProductionModel { Pyre = 175, Cooldown = 50 })
            }
        };
    }
}