
#ifndef F_PC_PRIORITY_H_
#define F_PC_PRIORITY_H_

#include "f_pc/f_pc_method_tag.h"

enum {
    fpcPi_CURRENT_e = 0xFFFD,
    fpcPi_SPECIAL_e = 0xFFFE,
};

typedef struct process_priority_queue_info {
    u32 mLayer;
    u16 mListID;
    u16 mListPrio;
} process_priority_queue_info;

typedef struct process_priority_class {
    /* 0x00 */ create_tag_class mBase;
    /* 0x14 */ process_method_tag_class mMtdTag;
    /* 0x30 */ process_priority_queue_info mInfoQ;
    /* 0x38 */ process_priority_queue_info mInfoCurr;
} process_priority_class;

s32 fpcPi_IsInQueue(process_priority_class* pPi);
s32 fpcPi_QueueTo(process_priority_class* pPi);
s32 fpcPi_ToQueue(process_priority_class* pPi);
process_priority_class* fpcPi_GetFromQueue(void);
s32 fpcPi_Delete(process_priority_class* pPi);
s32 fpcPi_IsNormal(unsigned int layer, u16 listID, u16 priority);
s32 fpcPi_Change(process_priority_class* pPi, unsigned int layer, u16 listID, u16 priority);
s32 fpcPi_Handler(void);
s32 fpcPi_Init(process_priority_class* pPi, void* pUserData, unsigned int layer, u16 listID,
               u16 priority);

extern s8 data_804505F0;  // roomReadId

#endif
