// init_hud_animator.hpp - Animación inicial del HUD del juego
// © 2025 Orni Attack
//
// Cubre la animación INIT_HUD del comienzo de cada partida/stage:
//   1. Crecimiento de los marcos del PLAYAREA con efecto pincel en 3 fases.
//   2. Marcador subiendo desde abajo.
//   3. Naves entrando desde la zona inferior hacia su spawn.
//
// Todas las funciones son puras (sin estado interno propio). GameScene aporta
// el contexto que necesitan: posiciones finales, texto del scoreboard y el
// renderer/VectorText. El timing global (progress 0..1) lo gestiona
// StageManager.

#pragma once

#include <string>

#include "core/graphics/vector_text.hpp"
#include "core/rendering/render_context.hpp"
#include "core/types.hpp"

namespace Systems::InitHud {

// Convierte un progreso global 0..1 al sub-progreso de un elemento que solo
// se anima en la ventana [ratio_init, ratio_end].
//   < ratio_init      → 0.0 (no empezó)
//   > ratio_end       → 1.0 (terminó)
//   en rango          → interpolación lineal 0..1
[[nodiscard]] auto computeRangeProgress(float global_progress,
                                        float ratio_init,
                                        float ratio_end) -> float;

// Calcula posición Y animada de una nave durante INIT_HUD. La nave sube
// desde 50 px bajo el PLAYAREA hasta `final_position` con easing.
[[nodiscard]] auto computeShipPosition(float progress, const Vec2& final_position) -> Vec2;

// Dibuja los 4 lados del PLAYAREA con efecto pincel en 3 fases:
//   0..33%  → línea superior crece desde el centro hacia los lados.
//   33..66% → líneas verticales bajan por los laterales.
//   66..100% → línea inferior crece desde los lados hacia el centro.
void drawBordersAnimated(Rendering::Renderer* renderer, float progress);

// Dibuja el scoreboard centrado, subiendo desde fuera de la pantalla
// hasta su posición final con easing.
void drawScoreboardAnimated(Graphics::VectorText& text,
                            const std::string& scoreboard_text,
                            float progress);

}  // namespace Systems::InitHud
