#ifndef ABILITYINFO_H
#define ABILITYINFO_H
#include <memory>

#include "AbilityEffect.h"
#include "CharacterClass.h"
#include "LSObject.h"
#include "BotSettings/ExportedAbility.h"


class AbilityInfo {
public:
    explicit AbilityInfo(const std::shared_ptr<LSObject> &obj) : lsObject(obj) {
    }

    string Name() const;

    string Description() const;

    string Tier() const;

    int HealthCost() const;

    int PowerCost() const;

    int DissonanceCost() const;

    int SavageryCost() const;

    int ConcentrationCost() const;

    int MainIconID() const;

    int HOIconID() const;

    float CastingTime() const;

    float RecoveryTime() const;

    float RecastTime() const;

    float MaxDuration() const;

    int NumClasses() const;

    CharacterClass ClassByIndex(int num) const;

    CharacterClass ClassByName(const string &name) const;

    AbilityEffect EffectByIndex(const int num) const;

    int NumEffects() const;

    int BackDropIconID() const;

    int HealthCostPerTick() const;

    int PowerCostPerTick() const;

    int DissonanceCostPerTick() const;

    int SavageryCostPerTick() const;

    int MaxAOETargets() const;

    bool DoesNotExpire() const;

    bool GroupRestricted() const;

    bool AllowRaid() const;

    bool IsBeneficial() const;

    float EffectRadius() const;

    int TargetType() const;

    int SpellBookType() const;

    float MinRange() const;

    float MaxRange() const;

    string ToLink() const;

private:
    const std::shared_ptr<LSObject> lsObject;
};


#endif //ABILITYINFO_H
