#pragma once

#include <string>
#include <SDL2/SDL.h>
#include <SDL2/SDL_ttf.h>
#include "EngineFrame/Component/Component.h"
class Game;

class Text : public Component
{
private:
    /* data */
    SDL_Texture *m_texture = nullptr;

public:
    Text(/* args */);
    Text(std::string Str, TTF_Font *font, SDL_Color color);
    Text(std::string Str, TTF_Font *font, SDL_Color textColor, SDL_Color strokeColor, int strokeSize);
    ~Text();

    // 显式引入基类的Init方法，避免隐藏
    using Component::Init;
    void Init(std::string Str, TTF_Font *font, SDL_Color color);
    void Init(std::string Str, TTF_Font *font, SDL_Color textColor, SDL_Color strokeColor, int strokeSize);
    void HandleEvents(SDL_Event *e) override;
    void Update(float deltaTime) override;
    void Render() override;
    void Clear() override;

    SDL_Texture *GetTexture();

public:
    // 组件标签
    Tag m_tag = Tag::RENDER | Tag::UPDATE; // 标记该组件需要渲染和更新

    std::string m_text;
    TTF_Font *m_font;
    SDL_Color m_text_color;
    SDL_Color m_stroke_color;
    int m_stroke_size = 0;

    SDL_Point Pos = {0, 0};                // 位置坐标
    SDL_Point TextureSize = {0, 0};        // 纹理大小
    SDL_Point Size = {0, 0};               // 大小
    SDL_Point Anchor = {0, 0};             // 中心点
    float Angle = 0.0f;                    // 旋转角度
    SDL_RendererFlip flip = SDL_FLIP_NONE; // 翻转

public:
    // 设置坐标
    void SetPos(SDL_Point pos);
    // 设置文本
    void SetText(std::string Str);

    // 获取坐标
    SDL_Point GetPos();
    // 获取文本
    std::string GetText();
};
