#pragma once

#include "State.h"

class OptionsState : public State {
public:
    explicit OptionsState(StateContext& ctx);
    void onEnter() override;
    void onExit() override;
    void handleEvent(const SDL_Event& e) override;
    void update(double frameMs) override;
    void render(SDL_Renderer* renderer, float logicalScale, SDL_Rect logicalVP) override;

private:
    enum class Field : int {
        Fullscreen = 0,
        Music = 1,
        SoundFx = 2,
        SmoothScroll = 3,
        Back = 4
    };

    static constexpr int MAX_NAME_LENGTH = 12;
    Field m_selectedField = Field::Fullscreen;
    double m_cursorTimer = 0.0;
    bool m_cursorVisible = true;

    void moveSelection(int delta);
    void activateSelection();
    void toggleFullscreen();
    void toggleMusic();
    void toggleSoundFx();
    void toggleSmoothScroll();
    void exitToMenu();
    bool isFullscreen() const;
    bool isMusicEnabled() const;
    bool isSoundFxEnabled() const;
    bool isSmoothScrollEnabled() const;
};
