// vector_text.hpp - Sistema de texto vectorial con display de 7-segmentos
// © 2025 Port a C++20 amb SDL3

#pragma once

#include <SDL3/SDL.h>

#include <memory>
#include <string>
#include <unordered_map>

#include "core/graphics/shape.hpp"
#include "core/types.hpp"

namespace Graphics {

class VectorText {
    public:
        VectorText(SDL_Renderer* renderer);

        // Renderizar string completo
        // - text: cadena a renderizar (soporta: A-Z, a-z, 0-9, '.', ',', '-', ':',
        // '!', '?', ' ')
        // - posicio: posición inicial (esquina superior izquierda)
        // - escala: factor de escala (1.0 = 20×40 px por carácter)
        // - spacing: espacio entre caracteres en píxeles (a escala 1.0)
        // - brightness: factor de brillantor (0.0-1.0, default 1.0 = màxima brillantor)
        void render(const std::string& text, const Punt& posicio, float escala = 1.0f, float spacing = 2.0f, float brightness = 1.0f);

        // Calcular ancho total de un string (útil para centrado)
        float get_text_width(const std::string& text, float escala = 1.0f, float spacing = 2.0f) const;

        // Calcular altura del texto (útil para centrado vertical)
        float get_text_height(float escala = 1.0f) const;

        // Verificar si un carácter está soportado
        bool is_supported(char c) const;

    private:
        SDL_Renderer* renderer_;
        std::unordered_map<char, std::shared_ptr<Shape>> chars_;

        void load_charset();
        std::string get_shape_filename(char c) const;
};

}  // namespace Graphics
