#ifndef ELECTRIC_DRILL_HPP_
#define ELECTRIC_DRILL_HPP_

#include <Item/StatefulItem/StatefulItem.hpp>
#include <Item/IEnergyContainingItem.hpp>
#include <Item/ITool.hpp>

/**
 * @brief Represents the electric drill.
 */
class ElectricDrill :
    public StatefulItem<int>,
    public IEnergyContainingItem,
    public ITool
{
public:
    static constexpr int capacity = 20000;

    ElectricDrill(std::string name);

    virtual void draw(GraphicsContext &context, int x, int y, const ItemStack &stack) override;
    virtual std::string getDisplayName(const ItemStack &stack) override;
    virtual void draw3D(GraphicsContext &context, WorldDisplay &worldDisplay, glm::vec3 pos, ItemStack &stack) override;
    virtual void drawFlat(GraphicsContext &context, WorldDisplay &worldDisplay, glm::mat4 martix, ItemStack &stack) override;
    virtual void getExtraToolTipLines(const ItemStack &stack, ToolTip &tip) override;
    virtual bool canMerge(const ItemStack &a, const ItemStack &b) override;
    virtual void getCheatStacks(ItemStack &baseStack, std::vector<ItemStack> &outStacks) override;
    virtual int pullEnergy(ItemStack &stack, int energy) override;
    virtual int pushEnergy(ItemStack &stack, int energy) override;
    virtual bool canDig(ItemStack &stack, Block &block) override;
    virtual float getPowerAgainst(ItemStack &stack, Block &block) override;
    virtual void harvest(ItemStack &stack, LocalWorld &world, glm::ivec3 pos) override;
    virtual Sound& getDigSoundFor(ItemStack &stack, Block &block) override;
    virtual void onMovedBy(Player &player, const ItemStack &stack) override;
};

#endif