#ifndef D_MENU_D_MENU_FISHING_H
#define D_MENU_D_MENU_FISHING_H

#include "d/d_com_inf_game.h"

class CPaneMgr;
struct CSTControl;
class J2DTextBox;
class STControl;
class dMsgString_c;
class mDoDvdThd_mountArchive_c;

class dMenu_Fishing_c : public dDlst_base_c {
public:
    
    enum dMenu_Fishing_Status {
        CLOSED = 0,
        READY_OPEN = 1,
        READY_MOVE = 2,
        READY_CLOSE = 3,
    };

    dMenu_Fishing_c(JKRExpHeap*, STControl*, CSTControl*);
    void _create();
    void _move();
    void _draw();
    bool isSync();
    void init();
    int _open();
    int _close();
    void wait_init();
    void wait_move();
    void screenSetBase();
    void screenSetDoIcon();
    void setAButtonString(u16);
    void setBButtonString(u16);
    u8 getFigure(int);
    void setFishParam(int, u16, u8);
    void setHIO(bool);

    virtual void draw() { _draw(); }
    virtual ~dMenu_Fishing_c();

    u8 getStatus() { return mStatus; }

    /* 0x004 */ JKRExpHeap* mpHeap;
    /* 0x008 */ JKRArchive* mpArchive;
    /* 0x00C */ STControl* mpStick;
    /* 0x010 */ CSTControl* mpCStick;
    /* 0x014 */ mDoDvdThd_mountArchive_c* mpMount;
    /* 0x018 */ J2DScreen* mpScreen;
    /* 0x01C */ J2DScreen* mpIconScreen;
    /* 0x020 */ J2DTextBox* mpAButtonString[5]; // Displays string based on stringID on A button Always empty
    /* 0x034 */ J2DTextBox* mpBButtonString[5]; // Displays string based on stringID on B button. Only "Back" here
    /* 0x048 */ CPaneMgr* mpParent;
    /* 0x04C */ CPaneMgr* mpFishParent[MAX_FINDABLE_FISHES]; // Displays fishes based on index and if collected once
    /* 0x064 */ CPaneMgr* mpFishParts[6][6];
    /* 0x0F4 */ CPaneMgr* mpFishInfoParent[2]; // 0: Blue info box ; 1: Red info box
    /* 0x0FC */ CPaneMgr* mpButtonAB[2]; // Controls the position and scale of the buttons. 0: A ; 1: B
    /* 0x104 */ CPaneMgr* mpButtonText[2]; // Controls the position and scale of the button texts. 0: A ; 1: B
    /* 0x10C */ J2DTextBox* field_0x10c[2][6]; // Displays the actual inches into the blue box of every fish 
    /* 0x13C */ J2DTextBox* field_0x13c[2][6]; // Displays the actual number of caught fishes into the red box of every fish
    /* 0x16C */ J2DTextBox* field_0x16c[2][6]; // Displays string "inches" next to the blue box of every fish
    /* 0x19C */ J2DTextBox* field_0x19c[2][6]; // Displays string "fish" next to the red box of every fish
    /* 0x1CC */ J2DTextBox* mpFishNameString[MAX_FINDABLE_FISHES]; // Displays name of every caught fish
    /* 0x1E4 */ J2DTextBox* mpInfoLargestString; // Displays "Largest" next to the blue box
    /* 0x1E8 */ J2DTextBox* mpInfoNumCaughtString; // Displays "No. Caught" next to the red box
    /* 0x1EC */ J2DTextBox* field_0x1ec; // unused
    /* 0x1F0 */ J2DPicture* mpBlackTex;
    /* 0x1F4 */ dMsgString_c* mpString;
    /* 0x1F8 */ s16 mFishListScreenFrames;
    /* 0x1FA */ u8 mStatus;
    /* 0x1FB */ u8 mProcess;
};

#endif /* D_MENU_D_MENU_FISHING_H */
