/*
Xinef
 */

#ifndef TRINITY_LOOTITEMSTORAGE_H
#define TRINITY_LOOTITEMSTORAGE_H

#include <map>
#include <list>

struct StoredLootItem
{
    StoredLootItem(uint32 i, uint32 c, int32 ri, uint32 rs) : 
        itemid(i), count(c), randomPropertyId(ri), randomSuffix(rs) { }

    // If itemid == 0 - money amount is stored in count value
    uint32 itemid;
    uint32 count;
    int32 randomPropertyId;
    uint32 randomSuffix;
};

typedef std::list<StoredLootItem> StoredLootItemList;
typedef UNORDERED_MAP<uint32, StoredLootItemList> LootItemContainer;

class LootItemStorage
{
    friend class ACE_Singleton<LootItemStorage, ACE_Thread_Mutex>;

    private:
        LootItemStorage();
        ~LootItemStorage();

    public:
        void LoadStorageFromDB();
        void RemoveEntryFromDB(uint32 containerId, uint32 itemid, uint32 count);

        void AddNewStoredLoot(Loot* loot, Player* player);
        bool LoadStoredLoot(Item* item);

        void RemoveStoredLootItem(uint32 containerId, uint32 itemid, uint32 count);
        void RemoveStoredLootMoney(uint32 containerId);
        void RemoveStoredLoot(uint32 containerId);

    private:
        LootItemContainer lootItemStore;
};

#define sLootItemStorage ACE_Singleton<LootItemStorage, ACE_Thread_Mutex>::instance()
#endif