// shape_renderer.hpp - Renderizado de formes vectorials
// © 2025 Port a C++20 con SDL3

#pragma once

#include "core/rendering/render_context.hpp"

#include <SDL3/SDL.h>

#include <memory>

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

namespace Rendering {

// Estructura per rotacions 3D (pitch, yaw, roll)
struct Rotation3D {
        float pitch;  // Rotación eix X (cabeceo arriba/baix)
        float yaw;    // Rotación eix Y (guiñada izquierda/derecha)
        float roll;   // Rotación eix Z (alabeo lateral)

        Rotation3D()
            : pitch(0.0F),
              yaw(0.0F),
              roll(0.0F) {}
        Rotation3D(float p, float y, float r)
            : pitch(p),
              yaw(y),
              roll(r) {}

        [[nodiscard]] bool has_rotation() const {
            return pitch != 0.0F || yaw != 0.0F || roll != 0.0F;
        }
};

// Renderizar shape con transformacions
// - renderer: SDL renderer
// - shape: shape vectorial a draw
// - position: posición del centro en coordenades mundials
// - angle: rotación en radians (0 = amunt, sentit horari)
// - scale: factor de scale (1.0 = mida original)
// - progress: progrés de l'animación (0.0-1.0, default 1.0 = tot visible)
// - brightness: factor de brightness (0.0-1.0, default 1.0 = màxima brightness)
void render_shape(Rendering::Renderer* renderer,
    const std::shared_ptr<Graphics::Shape>& shape,
    const Vec2& position,
    float angle,
    float scale = 1.0F,
    float progress = 1.0F,
    float brightness = 1.0F,
    const Rotation3D* rotation_3d = nullptr,
    SDL_Color color = {0, 0, 0, 0});  // alpha==0 → usa global oscilador

}  // namespace Rendering
