#ifndef M_DO_M_DO_HOSTIO_H
#define M_DO_M_DO_HOSTIO_H

#include "dolphin/types.h"

// move JOR stuff later
class JOREventListener {
public:

};

class JORReflexible : public JOREventListener {
public:
#ifdef DEBUG
    virtual ~JORReflexible() {}
#endif
};

class mDoHIO_child_c {
public:
    mDoHIO_child_c() {
        field_0x18 = 0;
        mReflexible = NULL;
    }

    ~mDoHIO_child_c() {}

    /* 0x00 */ char mName[24];
    /* 0x18 */ u8 field_0x18;
    /* 0x1C */ JORReflexible* mReflexible;
};

class mDoHIO_subRoot_c {
public:
    virtual ~mDoHIO_subRoot_c() {}

    s8 createChild(const char*, JORReflexible*);
    void deleteChild(s8);

private:
    /* 0x4 */ mDoHIO_child_c mChild[64];
};

class mDoHIO_root_c {
public:
    virtual ~mDoHIO_root_c() {}

    void update();
    
    s8 mDoHIO_createChild(const char* name, JORReflexible* hio) {
        return m_subroot.createChild(name, hio);
    }
    void mDoHIO_deleteChild(s8 childID) {
        m_subroot.deleteChild(childID);
    }

    /* 0x0 */ mDoHIO_subRoot_c m_subroot;
};

class mDoHIO_entry_c : public JORReflexible {
public:
    virtual ~mDoHIO_entry_c() {}
};

extern mDoHIO_root_c mDoHIO_root;

#endif /* M_DO_M_DO_HOSTIO_H */
