#pragma once
#include "../jabyengine_config.hpp"
#include "gpu_primitives.hpp"

namespace JabyEngine {
    namespace GPU {
        struct BIOS_Font {
            // This size is by Hardware limitation
            static constexpr auto Size = SizeU16::create(16, 16);

            static constexpr auto TextureLoadPos = Configuration::BIOSFont::texture_load_pos();
            static constexpr auto CLUTLoadPos    = Configuration::BIOSFont::CLUT_load_pos();

            static constexpr TexPage get_tex_page() {
                return TexPage::create(BIOS_Font::TextureLoadPos, GPU::TextureColorMode::clut4);
            }

            static constexpr TPage get_tpage() {
                return TPage::create(TextureLoadPos.x, TextureLoadPos.y, SemiTransparency::B_add_F, TextureColorMode::clut4);
            }

            static constexpr PageOffset get_offset_page() {
                return PageOffset::create(BIOS_Font::CLUTLoadPos.x & 0x3F, BIOS_Font::CLUTLoadPos.y & 0xFF);
            }

            static constexpr PageClut get_page_clut() {
                return PageClut::create(BIOS_Font::CLUTLoadPos);
            }

            static constexpr OffsetPageWithClut get_offset_page_with_clut() {
                return OffsetPageWithClut::create(BIOS_Font::get_offset_page(), BIOS_Font::get_page_clut());
            }
        };
    }
}