// escena_joc.hpp - Lògica principal del joc
// © 1999 Visente i Sergi (versió Pascal)
// © 2025 Port a C++20 amb SDL3

#ifndef ESCENA_JOC_HPP
#define ESCENA_JOC_HPP

#include "../../core/graphics/vector_text.hpp"
#include "../../core/rendering/sdl_manager.hpp"
#include "../effects/debris_manager.hpp"
#include "../../core/types.hpp"
#include "../constants.hpp"
#include "../entities/bala.hpp"
#include "../entities/enemic.hpp"
#include "../entities/nau.hpp"
#include <SDL3/SDL.h>
#include <array>
#include <cstdint>

// Classe principal del joc (escena)
class EscenaJoc {
public:
  explicit EscenaJoc(SDLManager &sdl);
  ~EscenaJoc() = default;

  void executar(); // Bucle principal de l'escena
  void inicialitzar();
  void actualitzar(float delta_time);
  void dibuixar();
  void processar_input(const SDL_Event &event);

private:
  SDLManager &sdl_;

  // Efectes visuals
  Effects::DebrisManager debris_manager_;

  // Estat del joc
  Nau nau_;
  std::array<Enemic, Constants::MAX_ORNIS> orni_;
  std::array<Bala, Constants::MAX_BALES> bales_;
  Poligon chatarra_cosmica_;
  uint16_t itocado_;

  // Text vectorial
  Graphics::VectorText text_;

  // Funcions privades
  void tocado();
  void dibuixar_marges() const; // Dibuixar vores de la zona de joc
  void dibuixar_marcador();     // Dibuixar marcador de puntuació
};

#endif // ESCENA_JOC_HPP
