#pragma once

#include <cstdint>

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

namespace Scenes {

    // Menú del títol. Reemplaça `ModuleSequence::doMenu()`.
    //
    // Flux:
    //   1. Carrega gfx/menu.gif (fondo) i gfx/menu2.gif (sprites) + paleta.
    //   2. Pintat inicial estàtic (fondo, logo, camell frame 0, base "jdes"),
    //      fade-in de paleta.
    //   3. Loop d'animació: escroll parallax de horitzó (cada 320 ms) i
    //      palmeres (cada 80 ms), cicle del camell (4 frames × 160 ms),
    //      i el text "polsa tecla" parpallejant cada 2 s (visible 1.4 s,
    //      amagat 0.6 s, igual que el `contador % 100 > 30` original).
    //   4. Quan l'usuari polsa qualsevol tecla — o 'P' per a activar Pepe —
    //      llegim `Info::ctx.pepe_activat`, disparem fade-out i marquem
    //      num_piramide=1 (vas a doSlides).
    //
    // Registrat al SceneRegistry amb state_key = 0.
    class MenuScene : public Scene {
       public:
        void onEnter() override;
        void tick(int delta_ms) override;
        [[nodiscard]] auto done() const -> bool override { return phase_ == Phase::DONE; }

       private:
        enum class Phase : std::uint8_t { FADING_IN,
            SHOWING,
            FADING_OUT,
            DONE };

        void render();

        SurfaceHandle fondo_;
        SurfaceHandle gfx_;
        PaletteFade fade_;
        FrameAnimator camello_{4, 160, true};

        Phase phase_{Phase::FADING_IN};

        // Scrollers horizontals. Mouen 1 pixel per pas.
        int palmeres_{0};
        int horitzo_{0};
        int palmeres_acc_ms_{0};
        int horitzo_acc_ms_{0};

        // Acumulador per al parpalleig del text "polsa tecla".
        int blink_ms_{0};
    };

}  // namespace Scenes
