#ifndef CRESCACHE_H
#define CRESCACHE_H

#include <Common/types.h>
#include <Common/TString.h>
#include <Resource/CPakFile.h>
#include <Resource/CResource.h>
#include <unordered_map>

struct SResSource
{
    TString Path;
    enum {
        Folder, PakFile
    } Source;
};

class CResCache
{
    std::unordered_map<u64, CResource*> mResourceCache;
    CPakFile *mpPak;
    SResSource mResSource;

public:
    CResCache();
    ~CResCache();
    void Clean();
    void SetFolder(TString path);
    void SetPak(const TString& path);
    void SetResSource(SResSource& ResSource);
    SResSource GetResSource();
    TString GetSourcePath();
    CResource* GetResource(CUniqueID ResID, CFourCC type);
    CResource* GetResource(const TString& ResPath);
    void CacheResource(CResource *pRes);
    void DeleteResource(CUniqueID ResID);
};

extern CResCache gResCache;

#endif // CRESCACHE_H