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

namespace Model.Entity.Data;

public partial class EntityData
{
    public static Dictionary<string, EntityModel> GetPassiveData()
    {
        return new Dictionary<string, EntityModel>
        {
            // Passives
            // Q'Rath Passives

            {
                DataType.PASSIVE_HallowedWarrior,
                new EntityModel(DataType.PASSIVE_HallowedWarrior, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Hallowed Warrior", Descriptive = DescriptiveType.Ability,
                        Description = @"Gains bonus shields when in Hallowed Ground",
                        Notes = "+20 Shields on Hallowed Ground."
                    })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
            },

            {
                DataType.PASSIVE_GreavesOfAhqar,
                new EntityModel(DataType.PASSIVE_GreavesOfAhqar, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Greaves Of Ahqar", Descriptive = DescriptiveType.Ability,
                        Description = @"+75 Sipari Speed"
                    })
                    .AddPart(new EntityRequirementModel
                        { Id = DataType.UPGRADE_GreavesOfAhqar, Requirement = RequirementType.Research_Upgrade })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
            },

            {
                DataType.PASSIVE_RelicOfTheWrathfulGaze,
                new EntityModel(DataType.PASSIVE_RelicOfTheWrathfulGaze, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Relic Of The Wrathful Gaze", Descriptive = DescriptiveType.Ability,
                        Description = @"Increases Castigator range against air."
                    })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.UPGRADE_RelicOfTheWrathfulGaze, Requirement = RequirementType.Research_Upgrade
                    })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
            },
            {
                DataType.PASSIVE_WingsOfTheKenLatir,
                new EntityModel(DataType.PASSIVE_WingsOfTheKenLatir, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Wings of the Ken'Latir", Descriptive = DescriptiveType.Passive,
                        Description = @"Increases the Warden's speed and shields significantly."
                    })
                    .AddPart(new EntityRequirementModel
                        { Id = DataType.UPGRADE_WingsOfTheKenLatir, Requirement = RequirementType.Research_Upgrade })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
            },

            {
                DataType.PASSIVE_ExecutionRites,
                new EntityModel(DataType.PASSIVE_ExecutionRites, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Execution Rites", Descriptive = DescriptiveType.Passive,
                        Description = @"Warden's attacks charge up to a hit that deals greatly increased damage."
                    })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
            },

            {
                DataType.PASSIVE_IconOfKhastEem,
                new EntityModel(DataType.PASSIVE_IconOfKhastEem, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Icon Of Khast'Eem", Descriptive = DescriptiveType.Passive,
                        Description = @"Grants the Zentari shields and flat armor reduction."
                    })
                    .AddPart(new EntityRequirementModel
                        { Id = DataType.UPGRADE_IconOfKhastEem, Requirement = RequirementType.Research_Upgrade })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
            },

            {
                DataType.PASSIVE_FaithCastBlades,
                new EntityModel(DataType.PASSIVE_FaithCastBlades, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Faith Cast Blades", Descriptive = DescriptiveType.Passive,
                        Description = @"Increases the range of the Zentari's ranged weapon."
                    })
                    .AddPart(new EntityRequirementModel
                        { Id = DataType.UPGRADE_FaithCastBlades, Requirement = RequirementType.Research_Upgrade })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
            },

            {
                DataType.PASSIVE_ThroneMovingShot,
                new EntityModel(DataType.PASSIVE_ThroneMovingShot, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Throne Moving Shot", Descriptive = DescriptiveType.Passive,
                        Description = @"Thrones can attack while moving."
                    })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
            },

            {
                DataType.PASSIVE_SiroccoScript,
                new EntityModel(DataType.PASSIVE_SiroccoScript, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Sirocco Script Rites", Descriptive = DescriptiveType.Passive,
                        Description = @"Increases the derish's movement speed"
                    })
                    .AddPart(new EntityRequirementModel { Id = DataType.UPGRADE_SiroccoScript })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
            },

            {
                DataType.PASSIVE_HallowingRites,
                new EntityModel(DataType.PASSIVE_HallowingRites, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Hallowing Rites", Descriptive = DescriptiveType.Passive,
                        Description = @"Ark Mother's creates Hallowed Ground on stabilize."
                    })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
            },

            {
                DataType.PASSIVE_HallowedRuin,
                new EntityModel(DataType.PASSIVE_HallowedRuin, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Hallowed Ruin", Descriptive = DescriptiveType.Passive,
                        Description = @"Hallowers have splash on attacks that leave an area of Hallowed Ground."
                    })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
            },

            {
                DataType.PASSIVE_RegentsWrath,
                new EntityModel(DataType.PASSIVE_RegentsWrath, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Regent's Wrath", Descriptive = DescriptiveType.Passive,
                        Description =
                            @"Sceptres gain energy when stabilized. They lose energy when moving. Energy is spent to have splash on attack."
                    })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
            },

            {
                DataType.PASSIVE_PsalmOfFire,
                new EntityModel(DataType.PASSIVE_PsalmOfFire, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Psalm Of Fire", Descriptive = DescriptiveType.Applies_Debuff,
                        Description = @"Fire Singers deal damage over time against attacked targets."
                    })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
            },

            {
                DataType.PASSIVE_HallowedWeapons,
                new EntityModel(DataType.PASSIVE_HallowedWeapons, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Hallowed Weapons", Descriptive = DescriptiveType.Applies_Debuff,
                        Description = @"Gains 14 damage while in Hallowed Ground"
                    })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
            },


            {
                DataType.PASSIVE_Zeal,
                new EntityModel(DataType.PASSIVE_Zeal, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Zeal", Descriptive = DescriptiveType.Passive,
                        Description = @"Increased attack speed to allied near Pillar of the Heavens"
                    })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
            },

            {
                DataType.PASSIVE_HallowedGround,
                new EntityModel(DataType.PASSIVE_HallowedGround, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Hallowed Ground", Descriptive = DescriptiveType.Passive,
                        Description = @"This building generates Hallowed Ground."
                    })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
            },


            {
                DataType.PASSIVE_WraithBowRange,
                new EntityModel(DataType.PASSIVE_WraithBowRange, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Wraith Bow Range", Descriptive = DescriptiveType.Ability,
                        Description = @"Increases Wraith Bow range against air."
                    })
                    .AddPart(new EntityRequirementModel
                        { Id = DataType.UPGRADE_EoxBowstring, Requirement = RequirementType.Research_Upgrade })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
            },

            {
                DataType.PASSIVE_Rootway,
                new EntityModel(DataType.PASSIVE_Rootway, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Rootway", Descriptive = DescriptiveType.Passive,
                        Description = @"Building generates Rootway."
                    })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
            },

            {
                DataType.PASSIVE_BehemothCapacity,
                new EntityModel(DataType.PASSIVE_BehemothCapacity, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Quitl Storage", Descriptive = DescriptiveType.Passive,
                        Description = @"Unit stores quitl for attacks."
                    })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
            },

            {
                DataType.PASSIVE_QuitlStorage2,
                new EntityModel(DataType.PASSIVE_QuitlStorage2, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Quitl Storage", Descriptive = DescriptiveType.Passive,
                        Description = @"Unit stores more quitl for attacks."
                    })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityRequirementModel
                        { Id = DataType.UPGRADE_VitellineCysts, Requirement = RequirementType.Research_Upgrade })
            },

            {
                DataType.PASSIVE_ExternalDigestion,
                new EntityModel(DataType.PASSIVE_ExternalDigestion, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "External Digestion", Descriptive = DescriptiveType.Passive,
                        Description = @"Ichor attacks splash in a cone."
                    })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
            },

            {
                DataType.PASSIVE_PursuitLigaments,
                new EntityModel(DataType.PASSIVE_PursuitLigaments, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Pursuit Ligaments", Descriptive = DescriptiveType.Passive,
                        Description = @"Increases Ichor speed to 530 (+106)."
                    })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityRequirementModel
                        { Id = DataType.UPGRADE_PursuitLigaments, Requirement = RequirementType.Research_Upgrade })
            },
            {
                DataType.PASSIVE_Temporary,
                new EntityModel(DataType.PASSIVE_Temporary, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Temporary", Descriptive = DescriptiveType.Passive,
                        Description = @"This unit has a limited duration before it dies."
                    })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
            },
            {
                DataType.PASSIVE_Stalk,
                new EntityModel(DataType.PASSIVE_Stalk, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Stalk", Descriptive = DescriptiveType.Passive,
                        Description =
                            @"After remaining stationary for several seconds, gain Hidden 3 and a movement speed boost.",
                        Notes = "Lose hidden on attacking"
                    })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
            },

            {
                DataType.PASSIVE_Ambush,
                new EntityModel(DataType.PASSIVE_Stalk, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Ambush", Descriptive = DescriptiveType.Passive,
                        Description = @"This unit deals double damage when attacking from hidden."
                    })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityRequirementModel { Id = DataType.UPGRADE_Ambush })
            },

            {
                DataType.PASSIVE_HiddenX,
                new EntityModel(DataType.PASSIVE_HiddenX, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Hidden X", Descriptive = DescriptiveType.Passive,
                        Description = @"This unit cannot be seen unless enemies units are within X."
                    })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
            },

            {
                DataType.PASSIVE_FallenHarvest,
                new EntityModel(DataType.PASSIVE_FallenHarvest, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Fallen Harvest", Descriptive = DescriptiveType.Passive,
                        Description = @"Incubator gets energy when nearby non-quitl units die."
                    })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
            },

            {
                DataType.PASSIVE_RestoreLifeblood,
                new EntityModel(DataType.PASSIVE_RestoreLifeblood, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Restore Lifeblood", Descriptive = DescriptiveType.Passive,
                        Description = @"Quickly heals a nearby unit"
                    })
                    .AddPart(new EntityProductionModel { Cooldown = 0.25f })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
            },


            {
                DataType.PASSIVE_Transfusion,
                new EntityModel(DataType.PASSIVE_Transfusion, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Transfusion", Descriptive = DescriptiveType.Passive,
                        Description = @"Spends mana to refill the mana of nearby units"
                    })
                    .AddPart(new EntityProductionModel { Energy = 4, Cooldown = 1 })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
            },
            {
                DataType.PASSIVE_FortifiedIcons,
                new EntityModel(DataType.PASSIVE_FortifiedIcons, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Fortified Icons", Descriptive = DescriptiveType.Ability,
                        Description = @"Increases Sipari shields and increases the bonus while in Hallowed Ground",
                        Notes = "+20 Shields, and +20 Shields on Hallowed Ground."
                    })
                    .AddPart(new EntityRequirementModel
                        { Id = DataType.UPGRADE_FortifiedIcons, Requirement = RequirementType.Research_Upgrade })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
            },
            {
                DataType.PASSIVE_MendingDecree,
                new EntityModel(DataType.PASSIVE_MendingDecree, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Mending Decree", Descriptive = DescriptiveType.Ability,
                        Description = @"Heals a nearby allied unit."
                    })
                    .AddPart(new EntityProductionModel { Energy = 10, Cooldown = 3 })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
            },
            {
                DataType.PASSIVE_GodstoneBulwark,
                new EntityModel(DataType.PASSIVE_GodstoneBulwark, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Godstone Bulkwark", Descriptive = DescriptiveType.Ability,
                        Description = @"Grants +1 damage reduction."
                    })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
            },

            {
                DataType.PASSIVE_Invervention,
                new EntityModel(DataType.PASSIVE_Invervention, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Intervention", Descriptive = DescriptiveType.Ability,
                        Description =
                            "The Saoshin releases healing energy. Allied units nearby heal over several seconds. This automatically activates when the Saoshin drops below 70 HP."
                    })
                    .AddPart(new EntityProductionModel { Pyre = 70, Cooldown = 5 })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
            },
            // Passives
            // Aru Passives
            {
                DataType.PASSIVE_BloodFrenzy,
                new EntityModel(DataType.PASSIVE_BloodFrenzy, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Blood Frenzy", Descriptive = DescriptiveType.Ability,
                        Description =
                            @"Thrums gain more attack speed for a short duration when a nearby allied Thrum kills an enemy unit."
                    })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
            },

            {
                DataType.PASSIVE_XacalDamage,
                new EntityModel(DataType.PASSIVE_XacalDamage, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Xacal Damage", Descriptive = DescriptiveType.Ability,
                        Description =
                            @"Xacal builds up charges for double damage overtime. These charges can be spent on attacking."
                    })
                    .AddPart(new EntityRequirementModel
                        { Id = DataType.UPGRADE_EthericFibers, Requirement = RequirementType.Research_Upgrade })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
            },

            {
                DataType.PASSIVE_XacalDefense,
                new EntityModel(DataType.PASSIVE_XacalDefense, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Xacal Defense", Descriptive = DescriptiveType.Ability,
                        Description =
                            @"Xacal take 1 less damage from all attacks."
                    })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
            },

            {
                DataType.PASSIVE_CastingFromBlood,
                new EntityModel(DataType.PASSIVE_CastingFromBlood, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Cast From Blood", Descriptive = DescriptiveType.Ability,
                        Description =
                            @"This unit can spend life to cast abilities when it doesn't have enough energy.",
                        Notes = "They must have at least one remaining hitpoint after to perform Cast From Blood."
                    })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
            },

            {
                DataType.PASSIVE_OssifyingSwarm,
                new EntityModel(DataType.PASSIVE_OssifyingSwarm, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Ossifying Swarm", Descriptive = DescriptiveType.Ability,
                        Description =
                            @"Reduces the movement speed and attack speed of enemies near your attack target.",
                        Notes = "10% movement and attack speed. Stacks up to 5 times."
                    })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
            },

            {
                DataType.PASSIVE_AaroxBurn,
                new EntityModel(DataType.PASSIVE_AaroxBurn, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Aarox Burn", Descriptive = DescriptiveType.Ability,
                        Description =
                            @"The aarox dies when attacking. Any units in its area of effect suffer damage over time.",
                        Notes = "Deals 75 damage over 3 seconds."
                    })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
            },

            {
                DataType.PASSIVE_QuenchingScythes,
                new EntityModel(DataType.PASSIVE_QuenchingScythes, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Quenching Scythes", Descriptive = DescriptiveType.Ability,
                        Description =
                            @"Recovers 5 life when dealing damage, or 10 mana if life is full."
                    })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
            },

            {
                DataType.PASSIVE_EngorgedArteries,
                new EntityModel(DataType.PASSIVE_EngorgedArteries, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Engorged Arteries", Descriptive = DescriptiveType.Ability,
                        Description =
                            @"Grants +2 range when deployed on rootway."
                    })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
            },

            {
                DataType.PASSIVE_ProjectileGestation,
                new EntityModel(DataType.PASSIVE_ProjectileGestation, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Projectile Gestation", Descriptive = DescriptiveType.Ability,
                        Description =
                            @"Fires a quitl at a target enemy unit."
                    })
                    .AddPart(new EntityProductionModel { Energy = 35, Cooldown = 2.5f })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
            },

            {
                DataType.PASSIVE_GuidingAmber,
                new EntityModel(DataType.PASSIVE_GuidingAmber, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Guiding Amber", Descriptive = DescriptiveType.Ability,
                        Description =
                            @"Units hit by this attack takes +1 damage for a few seconds, to a maximum of +4."
                    })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
            },

            {
                DataType.PASSIVE_FireQuitl,
                new EntityModel(DataType.PASSIVE_FireQuitl, EntityType.Passive)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Spawn Quitl", Descriptive = DescriptiveType.Ability,
                        Description = @"Unit spawns Quitl on attack.",
                        Notes = "Quitl deals 99 damage over it's life span of 8 seconds."
                    })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
            }
        };
    }
}