#pragma once

#include <Text.h>
#include <JSON.h>
#include <Trie.h>
#include <Writer.h>
#include <Model3D.h>
#include <Textur.h>

class Item;
class ItemStack;
class ItemSkill;
class ItemSkillLevelUpRule;

class ItemType : public virtual Framework::ReferenceCounter
{
protected:
    const int id;

    ItemType( int id );

    virtual void loadSuperItem( Item* zItem, Framework::StreamReader* zReader ) const;

public:
    ~ItemType();

    int getId() const;
    virtual Item* createItem() const = 0;
    virtual ItemStack* createItemStack( int size ) const;
    virtual Item* loadItem( Framework::StreamReader* zReader ) const;
    virtual Framework::Model3DData* getItemModel() const = 0;
    virtual Framework::Model3DTextur* getItemTextur() const = 0;
};