#ifndef OPENMW_ESM_SPELLSTATE_H
#define OPENMW_ESM_SPELLSTATE_H

#include <map>
#include <vector>
#include <string>
#include <set>

#include "defs.hpp"

namespace ESM
{
    class ESMReader;
    class ESMWriter;

    // NOTE: spell ids must be lower case
    struct SpellState
    {
        struct CorprusStats
        {
            int mWorsenings;
            TimeStamp mNextWorsening;
        };

        struct PermanentSpellEffectInfo
        {
            int mId;
            int mArg;
            float mMagnitude;
        };

        struct SpellParams
        {
            std::map<int, float> mEffectRands;
            std::set<int> mPurgedEffects;
        };
        typedef std::map<std::string, SpellParams> TContainer;
        TContainer mSpells;

        // FIXME: obsolete, used only for old saves
        std::map<std::string, std::vector<PermanentSpellEffectInfo> > mPermanentSpellEffects;
        std::map<std::string, CorprusStats> mCorprusSpells;

        std::map<std::string, TimeStamp> mUsedPowers;

        std::string mSelectedSpell;

        void load (ESMReader &esm);
        void save (ESMWriter &esm) const;
    };

}

#endif