#pragma once

#include "FileSelect/FileSelectMain.hpp"
#include "Game/GameModeManager.hpp"
#include "System/SysNew.hpp"
#include "global.h"

class FileSelectManager_UnkDrawBase {
public:
    /* 00 (vtable) */
    /* 04 */ LinkListImpl mUnk_04;
    /* 0C */

    FileSelectManager_UnkDrawBase();

    // data_ov000_020b1dd8 vtable
    /* 00 */ virtual ~FileSelectManager_UnkDrawBase();
    /* 08 */ virtual void vfunc_08(unk32 param1);
    /* 0C */ virtual void vfunc_0C(unk32 param1);
    /* 10 */ virtual void vfunc_10(unk32 param1, unk32 param2);
    /* 14 */ virtual void vfunc_14(unk32 param1);
    /* 18 */ virtual void vfunc_18(unk32 param1);
    /* 1C */ virtual void vfunc_1C(unk32 param1);
    /* 20 */ virtual void vfunc_20(unk32 param1, unk32 param2);
    /* 24 */ virtual void vfunc_24();
    /* 28 */
};

class FileSelectManager_160 : public FileSelectManager_UnkDrawBase {
public:
    /* 00 (vtable) */
    /* 0C */ unk32 mUnk_0C;
    /* 10 */ FileSelectMain *mUnk_10;
    /* 14 */ GameModeManagerBase_104 *mUnk_14;
    /* 18 */ GameModeManagerBase_104 *mUnk_18;
    /* 1C */ void *mUnk_1C;
    /* 20 */

    FileSelectManager_160(GameModeManagerBase_104 *param1, FileSelectMain *param2);

    // data_ov019_020d23e0 vtable
    /* 00 */ virtual ~FileSelectManager_160() override;
    /* 08 */ virtual void vfunc_08(unk32 param1) override;
    /* 0C */ virtual void vfunc_0C(unk32 param1) override;
    /* 10 */ virtual void vfunc_10(unk32 param1, unk32 param2) override;
    /* 14 */ virtual void vfunc_14(unk32 param1) override;
    /* 18 */ virtual void vfunc_18(unk32 param1) override;
    /* 1C */ virtual void vfunc_1C(unk32 param1) override;
    /* 20 */ virtual void vfunc_20(unk32 param1, unk32 param2) override;
    /* 24 */ virtual void vfunc_24() override;
    /* 28 */
};

class FileSelectManager_164 : public FileSelectManager_UnkDrawBase {
public:
    /* 00 (base) */
    /* 0C */ unk32 mUnk_0C;
    /* 10 */ FileSelectMain *mUnk_10;
    /* 14 */ GameModeManagerBase_104 *mUnk_14;
    /* 18 */ GameModeManagerBase_104 *mUnk_18;
    /* 1C */

    FileSelectManager_164(GameModeManagerBase_104 *param1, FileSelectMain *param2);

    // data_ov019_020d2410 vtable
    /* 04 */ virtual ~FileSelectManager_164() override;
    /* 08 */ virtual void vfunc_08(unk32 param1) override;
    /* 0C */ virtual void vfunc_0C(unk32 param1) override;
    /* 10 */ virtual void vfunc_10(unk32 param1, unk32 param2) override;
    /* 14 */ virtual void vfunc_14(unk32 param1) override;
    /* 18 */ virtual void vfunc_18(unk32 param1) override;
    /* 1C */ virtual void vfunc_1C(unk32 param1) override;
    /* 20 */ virtual void vfunc_20(unk32 param1, unk32 param2) override;

    static void func_ov019_020d02f4();
};
