// starfield_parallax.hpp - Capa més profunda del fons: estrelles 2D amb parallax
// © 2026 JailDesigner
//
// Estrelles 2D distribuïdes en 3 capes de profunditat. Cada capa té el seu
// factor parallax: el "món" es desplaça amb world_velocity i les estrelles
// d'una capa es mouen amb world_velocity * parallax_factor. Les més
// properes es mouen més (factor alt) → sensació de profunditat.
// Quan una estrella surt de PLAYAREA, reapareix per la banda oposada
// (wraparound).

#pragma once

#include <SDL3/SDL.h>

#include <array>

#include "core/defaults/starfield_parallax.hpp"
#include "core/rendering/render_context.hpp"
#include "core/types.hpp"

namespace Graphics {

    class StarfieldParallax {
       public:
        explicit StarfieldParallax(Rendering::Renderer* renderer);

        // Avança el desplaçament de les estrelles segons world_velocity (vector
        // del moviment del món en px/s; típicament = -ship_velocity).
        // world_velocity == {0, 0} → estrelles quietes.
        void update(float delta_time, Vec2 world_velocity);

        void draw() const;

       private:
        struct Star {
            float x{0.0F};
            float y{0.0F};
            int layer{0};       // 0=Far, 1=Mid, 2=Near
            SDL_Color color{};  // tint precomputat entre blanc i cyan
        };

        void buildStars();
        static auto layerBrightness(int layer) -> float;
        static auto layerParallax(int layer) -> float;
        static auto layerSize(int layer) -> int;

        Rendering::Renderer* renderer_;
        std::array<Star, Defaults::StarfieldParallax::TOTAL_COUNT> stars_{};
    };

}  // namespace Graphics
