#pragma once

#include "game/scenes/scene.hpp"
#include "game/scenes/surface_handle.hpp"

namespace Scenes {

    // Sub-escena de sprites de la intro (prota + momia + mapa + etc).
    // Reemplaça `ModuleSequence::doIntroSprites()`. No es registra al
    // SceneRegistry — es construeix com a membre de `IntroScene` o
    // `IntroNewLogoScene` quan aquestes completen el seu revelat del logo.
    // Rep el `SurfaceHandle` del gfx de la intro via move, de manera que
    // quan acabe l'escena el surface es lliberarà automàticament.
    //
    // En entrar tria una de 3 variants (`rand() % 3`): "interrogant/momia",
    // "creu/pedra" o "ball de carnaval". Cada variant té un nombre
    // diferent de fases però comparteixen el mateix motor: un comptador
    // `step` que s'incrementa cada 20 ms, amb una taula per variant que
    // mapeja (rang d'i, renderer) a cada fase. Qualsevol tecla salta
    // l'escena — el flag `skippable` per fase es manté com a mecanisme
    // per si alguna fase futura ha de ser no interrompuda (al vell codi
    // la fase "final" de la variant 0 no cridava wait_frame_or_skip, cosa
    // molt probablement un oversight: ací es tracta com a skippable).
    class IntroSpritesScene : public Scene {
       public:
        explicit IntroSpritesScene(SurfaceHandle&& gfx);
        ~IntroSpritesScene() override = default;

        void onEnter() override;
        void tick(int delta_ms) override;
        [[nodiscard]] auto done() const -> bool override { return done_; }

       private:
        SurfaceHandle gfx_;
        int variant_{0};      // 0..2 — triada a onEnter() amb rand() % 3
        int phase_{0};        // índex dins la variant actual
        int phase_step_{0};   // passos consumits dins la fase actual
        int step_acc_ms_{0};  // acumulador per emetre steps de 20 ms
        bool done_{false};
    };

}  // namespace Scenes
