#ifndef GLUE_C_CHARACTER_SELECTION_HPP
#define GLUE_C_CHARACTER_SELECTION_HPP

#include "glue/CharacterSelectionDisplay.hpp"
#include "net/Types.hpp"
#include <storm/Array.hpp>

class CSimpleModelFFX;

class CCharacterSelection {
    public:
        // Static variables
        static int32_t s_characterCount;
        static TSGrowableArray<CharacterSelectionDisplay> s_characterList;
        static float s_charFacing;
        static int32_t s_enterWorldIndex;
        static CSimpleModelFFX* s_modelFrame;
        static uint32_t s_restrictHuman;
        static uint32_t s_restrictDwarf;
        static uint32_t s_restrictGnome;
        static uint32_t s_restrictNightElf;
        static uint32_t s_restrictDraenei;
        static uint32_t s_restrictOrc;
        static uint32_t s_restrictTroll;
        static uint32_t s_restrictTauren;
        static uint32_t s_restrictUndead;
        static uint32_t s_restrictBloodElf;
        static int32_t s_selectionIndex;

        // Static functions
        static void ClearCharacterList();
        static void ClearCharacterModel();
        static void EnumerateCharactersCallback(const CHARACTER_INFO& info, void* param);
        static const CharacterSelectionDisplay* GetCharacterDisplay(int32_t index);
        static const CharacterSelectionDisplay* GetSelectedCharacter();
        static void OnGetCharacterList();
        static void RenderPrep();
        static void SetBackgroundModel(const char* modelPath);
        static void SetFacing(float facing);
        static void ShowCharacter();
        static void Shutdown();
        static void UpdateCharacterList();
};

#endif
