#ifndef D_A_NPC_SHOP0_H
#define D_A_NPC_SHOP0_H

#include "d/actor/d_a_npc.h"

/**
 * @ingroup actors-npcs
 * @class daNpc_Shop0_c
 * @brief Shop 0?
 *
 * @details
 *
 */

class daNpc_Shop0_Param_c {
public:
    virtual ~daNpc_Shop0_Param_c() {};
    
    struct param {
        /* 0x0 */ u32 mParam1;
        /* 0x4 */ u32 mParam2;
        /* 0x8 */ u32 mParam3;
    };

    static param const mParam;
};


class daNpc_Shop0_c : public fopAc_ac_c {
public:
    virtual ~daNpc_Shop0_c();
    int create();
    int createHeap();
    int destroy();
    int execute();
    int draw();
    char DUSK_CONST* getResName();
    void getParam();
    int getFlowNodeNum();
    int isDelete();
    int init();
    J3DAnmTransform* getTrnsfrmAnmP(int, char DUSK_CONST* DUSK_CONST*);
    int setBckAnm(J3DAnmTransform*, f32, int, int, int, bool);
    int setCollision();
    int checkEvent();
    void orderEvent();
    void setMtx();
    void setRoomInf();
    int cut_alert(int, int);
    int chkProcess(int (daNpc_Shop0_c::*)(void*));
    int setProcess(int (daNpc_Shop0_c::*)(void*), void*, int);
    int wait(void*);
    int talk(void*);

    static dCcD_SrcCyl const mCylDat;

    /* 0x56c */ u8 mParam;
    /* 0x570 */ mDoExt_bckAnm mBckAnm;
    /* 0x58c */ f32 mPlaySpeed;
    /* 0x590 */ u32 mFlowNodeNum;
    /* 0x594 */ dMsgFlow_c mMsgFlow;
    /* 0x5e0 */ request_of_phase_process_class mPhaseReq;
    /* 0x5e8 */ J3DModel* mpModel;
    /* 0x5ec */ f32 mGroundCross;
    /* 0x5f0 */ dBgS_ObjGndChk mGndChk;
    /* 0x644 */ daNpc_Shop0_Param_c* mpShopParam;
    /* 0x648 */ dBgS_AcchCir mAcchCir;
    /* 0x688 */ dBgS_ObjAcch mAcch;
    /* 0x860 */ dCcD_Stts mStts;
    /* 0x89c */ dCcD_Cyl mCyl;
    /* 0x9d8 */ s32 mMode;
    /* 0x9dc */ int (daNpc_Shop0_c::*mProcess)(void*);
    /* 0x9e8 */ s16 field_0x9e8;
    /* 0x9ea */ u8 field_0x9ea;
};

STATIC_ASSERT(sizeof(daNpc_Shop0_c) == 0x9ec);

#endif /* D_A_NPC_SHOP0_H */
