#include "global.h"
#include "entity.h"
#include "functions.h"
#include "structures.h"
#include "textbox.h"
#include "room.h"
#include "flags.h"
#include "script.h"

extern u32 sub_080696BC(Entity*);

extern void (*const gUnk_08111B88[])(Entity*);
extern void (*const gUnk_08111B98[])(Entity*);

extern u16 gUnk_08111BA0[];

void GoronMerchant(Entity* this) {
    if ((this->flags & 2) != 0) {
        gUnk_08111B98[this->action](this);
    } else {
        gUnk_08111B88[this->action](this);
        sub_0806ED78(this);
    }
}

void sub_08069584(Entity* this) {
    if (gScreenTransition.field_0x24[8] != 0) {
        this->action = 3;
    } else {
        this->action = 1;
    }
    InitAnimationForceUpdate(this, 2);
}

void sub_080695AC(Entity* this) {
    s32 iVar2;

    if (++this->field_0xf > 0x10) {
        this->field_0xf = 0;
        iVar2 = sub_0806ED9C(this, 0x28, 0x28);
        if (iVar2 > -1) {
            this->animationState = iVar2;
        }
    }
    if (this->animIndex != this->animationState) {
        InitAnimationForceUpdate(this, this->animationState);
    }
}

void sub_080695E8(Entity* this) {
    UpdateAnimationSingleFrame(this);
    if ((gTextBox.doTextBox & 0x7f) == 0) {
        this->action = 1;
        this->interactType = gTextBox.doTextBox & 0x7f;
        sub_0805E584(this);
        InitAnimationForceUpdate(this, this->animationState);
    }
}

void sub_0806961C(Entity* this) {
    if (gScreenTransition.field_0x24[8] == 2) {
        UpdateAnimationSingleFrame(this);
    }
    sub_0806FD3C(this);
}

void sub_0806963C(Entity* this) {
    this->action = 1;
    this->spriteSettings.b.draw = TRUE;
    sub_0807DD50(this);
}

void sub_08069654(Entity* this) {
    sub_0807DD94(this, NULL);
}

void sub_08069660(Entity* this) {
    u32 uVar1;

    TextboxNoOverlap(0x2c1c, this);
    gTextBox.field_0x10 = (u16)sub_080696BC(this);
}

void sub_08069684(void) {
    Manager* mgr;

    if (FindEntityByID(9, 0x31, 8) == NULL) {
        mgr = GetEmptyManager();
        if (mgr != NULL) {
            mgr->type = 9;
            mgr->subtype = 0x31;
            AppendEntityToList((Entity*)mgr, 8);
        }
    }
}

void sub_080696B0(void) {
    gRoomVars.itemForSaleIndex = 0;
}

u32 sub_080696BC(Entity* this) {
    u32 uVar1;
    u32 temp;
    u32 iVar3;
    s32 temp2;

    temp2 = gRoomVars.field_0x7;
    if (temp2 > 0x70) {
        iVar3 = 1;
    } else {
        iVar3 = 0;
    }
    if (temp2 > 0x72) {
        iVar3 = 2;
    }

    temp = CheckGlobalFlag(0x3e);
    uVar1 = BOOLCAST(temp);

    if (CheckGlobalFlag(0x3f)) {
        uVar1 = 2;
    }
    if (CheckGlobalFlag(0x40)) {
        uVar1 = 3;
    }
    if (CheckGlobalFlag(0x41)) {
        uVar1 = 4;
    }
    return gUnk_08111BA0[uVar1 * 3 + iVar3];
}
