#ifndef Z_EN_KO_H
#define Z_EN_KO_H

#include "ultra64.h"
#include "actor.h"

struct EnKo;

typedef void (*EnKoActionFunc)(struct EnKo*, struct PlayState*);

typedef struct EnKo {
    /* 0x0000 */ Actor actor;
    /* 0x014C */ SkelAnime skelAnime;
    /* 0x0190 */ EnKoActionFunc actionFunc;
    /* 0x0194 */ s8 headObjectSlot;
    /* 0x0195 */ s8 bodyObjectSlot;
    /* 0x0196 */ s8 legsObjectSlot;
    /* 0x0197 */ s8 osAnimeObjectSlot;
    /* 0x0198 */ ColliderCylinder collider;
    /* 0x01E4 */ struct Path* path;
    /* 0x01E8 */ NpcInteractInfo interactInfo;
    /* 0x0210 */ u8 unk_210; // block trade quest sfx
    /* 0x0212 */ s16 forestQuestState;
    /* 0x0214 */ s16 blinkTimer;
    /* 0x0216 */ s16 eyeTextureIndex;
    /* 0x0218 */ f32 appearDist;
    /* 0x021C */ f32 lookDist; // distance to start looking at player
    /* 0x0220 */ f32 modelAlpha;
    /* 0x0224 */ Vec3s jointTable[16];
    /* 0x0284 */ Vec3s morphTable[16];
    /* 0x02E4 */ s16 fidgetTableY[16];
    /* 0x0304 */ s16 fidgetTableZ[16];
} EnKo; // size = 0x0324

typedef enum KokiriChildren {
    ENKO_TYPE_CHILD_0,
    ENKO_TYPE_CHILD_1,
    ENKO_TYPE_CHILD_2,
    ENKO_TYPE_CHILD_3,
    ENKO_TYPE_CHILD_4,
    ENKO_TYPE_CHILD_5, // Shop Awning
    ENKO_TYPE_CHILD_6,
    ENKO_TYPE_CHILD_7,
    ENKO_TYPE_CHILD_8,
    ENKO_TYPE_CHILD_9,
    ENKO_TYPE_CHILD_10,
    ENKO_TYPE_CHILD_11,
    ENKO_TYPE_CHILD_FADO,
    ENKO_TYPE_CHILD_MAX
} KokiriChildren;

typedef enum KokiriForestQuestState {
    ENKO_FQS_CHILD_START,
    ENKO_FQS_CHILD_STONE,
    ENKO_FQS_CHILD_SARIA,
    ENKO_FQS_ADULT_ENEMY,
    ENKO_FQS_ADULT_SAVED
} KokiriForestQuestState;

#endif
