#ifndef GAME_MWWORLD_GROUNDCOVER_STORE_H
#define GAME_MWWORLD_GROUNDCOVER_STORE_H

#include <components/esm/refid.hpp>
#include <map>
#include <string>
#include <vector>

namespace ESM
{
    struct ESM_Context;
    struct Static;
    struct Cell;
}

namespace Loading
{
    class Listener;
}

namespace Files
{
    class Collections;
}

namespace ToUTF8
{
    class Utf8Encoder;
}

namespace MWWorld
{
    template <class T>
    class Store;

    class GroundcoverStore
    {
    private:
        std::map<ESM::RefId, std::string> mMeshCache;
        std::map<std::pair<int, int>, std::vector<ESM::ESM_Context>> mCellContexts;

    public:
        void init(const Store<ESM::Static>& statics, const Files::Collections& fileCollections,
            const std::vector<std::string>& groundcoverFiles, ToUTF8::Utf8Encoder* encoder,
            Loading::Listener* listener);

        std::string getGroundcoverModel(const ESM::RefId& id) const;
        void initCell(ESM::Cell& cell, int cellX, int cellY) const;
    };
}

#endif