#ifndef MAGIC_HPP_INCLUDED
#define MAGIC_HPP_INCLUDED

#include <string>
#include <cstdint>

/** @addtogroup GameTabs
* @{ */
class Magic
{
    public:

        typedef enum SPELL
        {
            NORMAL_LUMBRIDGE_HOME_TELEPORT,
            NORMAL_WIND_STRIKE,
            NORMAL_CONFUSE,
            NORMAL_ENCHANT_CROSSBOW_BOLT,
            NORMAL_WATER_STRIKE,
            NORMAL_LVL1_ENCHANT,
            NORMAL_EARTH_STRIKE,
            NORMAL_WEAKEN,
            NORMAL_FIRE_STRIKE,
            NORMAL_BONES_TO_BANANAS,
            NORMAL_WIND_BOLT,
            NORMAL_CURSE,
            NORMAL_BIND,
            NORMAL_LOW_LEVEL_ALCHEMY,
            NORMAL_WATER_BOLT,
            NORMAL_VARROCK_TELEPORT,
            NORMAL_LVL2_ENCHANT,
            NORMAL_EARTH_BOLT,
            NORMAL_LUMBRIDGE_TELEPORT,
            NORMAL_TELEKINETIC_GRAB,
            NORMAL_FIRE_BOLT,
            NORMAL_FALADOR_TELEPORT,
            NORMAL_CRUMBLE_UNDEAD,
            NORMAL_TELEPORT_TO_HOUSE,
            NORMAL_WIND_BLAST,
            NORMAL_SUPERHEAT_ITEM,
            NORMAL_CAMELOT_TELEPORT,
            NORMAL_WATER_BLAST,
            NORMAL_LVL3_ENCHANT,
            NORMAL_IBAN_BLAST,
            NORMAL_SNARE,
            NORMAL_MAGIC_DART,
            NORMAL_ARDOUGNE_TELEPORT,
            NORMAL_EARTH_BLAST,
            NORMAL_HIGH_LEVEL_ALCHEMY,
            NORMAL_CHARGE_WATER_ORB,
            NORMAL_LVL4_ENCHANT,
            NORMAL_WATCHTOWER_TELEPORT,
            NORMAL_FIRE_BLAST,
            NORMAL_CHARGE_EARTH_ORB,
            NORMAL_BONES_TO_PEACHES,
            NORMAL_SARADOMIN_STRIKE,
            NORMAL_CLAWS_OF_GUTHIX,
            NORMAL_FLAMES_OF_ZAMORAK,
            NORMAL_TROLLHEIM_TELEPORT,
            NORMAL_WIND_WAVE,
            NORMAL_CHARGE_FIRE_ORB,
            NORMAL_TELEPORT_TO_APE_ATOLL,
            NORMAL_WATER_WAVE,
            NORMAL_CHARGE_AIR_ORB,
            NORMAL_VULNERABILITY,
            NORMAL_LVL5_ENCHANT,
            NORMAL_TELEPORT_TO_KOUREND,
            NORMAL_EARTH_WAVE,
            NORMAL_ENFEEBLE,
            NORMAL_TELEOTHER_LUMBRIDGE,
            NORMAL_FIRE_WAVE,
            NORMAL_ENTANGLE,
            NORMAL_STUN,
            NORMAL_CHARGE,
            NORMAL_TELEOTHER_FALADOR,
            NORMAL_TELE_BLOCK,
            NORMAL_TELEPORT_TO_BOUNTY_TARGET,
            NORMAL_LVL6_ENCHANT,
            NORMAL_TELEOTHER_CAMELOT,
            NORMAL_LVL7_ENCHANT,

            LUNAR_LUNAR_HOME_TELEPORT,
            LUNAR_BAKE_PIE,
            LUNAR_GEOMANCY,
            LUNAR_CURE_PLANT,
            LUNAR_MONSTER_EXAMINE,
            LUNAR_NPC_CONTACT,
            LUNAR_CURE_OTHER,
            LUNAR_HUMIDIFY,
            LUNAR_MOONCLAN_TELEPORT,
            LUNAR_TELE_GROUP_MOONCLAN,
            LUNAR_CURE_ME,
            LUNAR_OURANIA_TELEPORT,
            LUNAR_HUNTER_KIT,
            LUNAR_WATERBIRTH_TELEPORT,
            LUNAR_TELE_GROUP_WATERBIRTH,
            LUNAR_CURE_GROUP,
            LUNAR_STAT_SPY,
            LUNAR_BARBARIAN_TELEPORT,
            LUNAR_TELE_GROUP_BARBARIAN,
            LUNAR_SPIN_FLAX,
            LUNAR_SUPERGLASS_MAKE,
            LUNAR_TAN_LEATHER,
            LUNAR_KHAZARD_TELEPORT,
            LUNAR_TELE_GROUP_KHAZARD,
            LUNAR_DREAM,
            LUNAR_STRING_JEWELLERY,
            LUNAR_STAT_RESTORE_POT_SHARE,
            LUNAR_MAGIC_IMBUE,
            LUNAR_FERTILE_SOIL,
            LUNAR_BOOST_POTION_SHARE,
            LUNAR_FISHING_GUILD_TELEPORT,
            LUNAR_TELEPORT_TO_BOUNTY_TARGET,
            LUNAR_TELE_GROUP_FISHING_GUILD,
            LUNAR_PLANK_MAKE,
            LUNAR_CATHERBY_TELEPORT,
            LUNAR_TELE_GROUP_CATHERBY,
            LUNAR_RECHARGE_DRAGONSTONE,
            LUNAR_ICE_PLATEAU_TELEPORT,
            LUNAR_TELE_GROUP_ICE_PLATEAU,
            LUNAR_ENERGY_TRANSFER,
            LUNAR_HEAL_OTHER,
            LUNAR_VENGEANCE_OTHER,
            LUNAR_VENGEANCE,
            LUNAR_HEAL_GROUP,
            LUNAR_SPELLBOOK_SWAP,

            ANCIENT_ICE_RUSH,
            ANCIENT_ICE_BLITZ,
            ANCIENT_ICE_BURST,
            ANCIENT_ICE_BARRAGE,
            ANCIENT_BLOOD_RUSH,
            ANCIENT_BLOOD_BLITZ,
            ANCIENT_BLOOD_BURST,
            ANCIENT_BLOOD_BARRAGE,
            ANCIENT_SMOKE_RUSH,
            ANCIENT_SMOKE_BLITZ,
            ANCIENT_SMOKE_BURST,
            ANCIENT_SMOKE_BARRAGE,
            ANCIENT_SHADOW_RUSH,
            ANCIENT_SHADOW_BLITZ,
            ANCIENT_SHADOW_BURST,
            ANCIENT_SHADOW_BARRAGE,
            ANCIENT_PADDEWWA_TELEPORT,
            ANCIENT_SENNTISTEN_TELEPORT,
            ANCIENT_KHARYRLL_TELEPORT,
            ANCIENT_LASSAR_TELEPORT,
            ANCIENT_DAREEYAK_TELEPORT,
            ANCIENT_CARRALLANGAR_TELEPORT,
            ANCIENT_ANNAKARL_TELEPORT,
            ANCIENT_GHORROCK_TELEPORT,
            ANCIENT_TELEPORT_TO_BOUNTY_TARGET,
            ANCIENT_EDGEVILLE_HOME_TELEPORT
        } SPELL;


        static bool IsOpen();
        static bool Open();

        static bool HasLevel(const SPELL& Spell);

        static bool IsSpellSelected();
        static bool IsSpellSelected(const SPELL& Spell);
        static bool IsSpellSelected(const std::string& Name);
        static std::string GetSelectedSpellName();

        static bool CastSpell(const SPELL& Spell);
        static bool SelectSpell(const SPELL& Spell);
};

/** @} */

#endif // MAGIC_HPP_INCLUDED
