// debug_overlay.hpp - Overlay de debug (FPS + VSync) toggleable con F11
// © 2026 JailDesigner
//
// Sistema global propiedad del Director. Se actualiza y dibuja cada frame
// después de la escena (queda on top). En builds debug arranca visible,
// en release oculto. F11 alterna visibilidad.

#pragma once

#include "core/config/engine_config.hpp"
#include "core/graphics/vector_text.hpp"
#include "core/rendering/render_context.hpp"

namespace System {

    class DebugOverlay {
       public:
        // El rendering_cfg ha de viure tant com l'overlay (el posseeix
        // el Director, que sobreviu a tots els sistemes).
        DebugOverlay(Rendering::Renderer* renderer,
            const Config::RenderingConfig& rendering_cfg);

        // Acumula FPS. Llamar una vez por frame con el delta del Director.
        void update(float delta_time);

        // Pinta el overlay si está visible. Posición esquina sup-izq.
        void draw() const;

        void toggle() { visible_ = !visible_; }
        [[nodiscard]] auto isVisible() const -> bool { return visible_; }

       private:
        Graphics::VectorText text_;
        const Config::RenderingConfig* rendering_cfg_;
        bool visible_{true};

        // FPS counter — se actualiza cada FPS_UPDATE_INTERVAL segundos.
        float fps_accumulator_{0.0F};
        int fps_frame_count_{0};
        int fps_display_{0};
    };

}  // namespace System
