#ifndef SPECIAL_ITEM_DROP_MGR_H
#define SPECIAL_ITEM_DROP_MGR_H

#include "common.h"
#include "m/m_angle.h"
#include "m/m_vec.h"

enum SpecialItemDropTable {
    SPECIAL_ITEM_0 = 0,
    SPECIAL_ITEM_1,
    SPECIAL_ITEM_2,
    SPECIAL_ITEM_3,
    SPECIAL_ITEM_4,
    SPECIAL_ITEM_5,
    SPECIAL_ITEM_6,
    SPECIAL_ITEM_7,
    SPECIAL_ITEM_8,
    SPECIAL_ITEM_9,
    SPECIAL_ITEM_10,
    SPECIAL_ITEM_10BOMBS,
    SPECIAL_ITEM_ARROWS,
    SPECIAL_ITEM_SEEDS,
    // ...
};

class SpecialItemDropMgr {
private:
    static SpecialItemDropMgr *sInstance;

public:
    static SpecialItemDropMgr *GetInstance() {
        return sInstance;
    }

    SpecialItemDropMgr();
    virtual ~SpecialItemDropMgr() {}

    static SpecialItemDropMgr *create();

    int fn_800C7BB0(int specialItemId);
    bool shouldTryExtraHearts(int specialItemId);
    bool shouldTryExtraRupees(int specialItemId);
    int giveSpecialDropItem(int specialItemId, int roomid, mVec3_c *pos, int subtype, mAng rot, s32 unused);
    bool spawnSpecialDropItem(int specialItemId, int roomid, mVec3_c *pos, int subtype, mAng rot);
};

#endif
