#ifndef AUDIO_MANAGER_HPP_
#define AUDIO_MANAGER_HPP_

#include <Utilities/Extern.hpp>

/**
 * @brief Represents the audio manager.
 */
class AudioManager
{
private:
    static ALCdevice* device;
    static ALCcontext* context;
    static bool audioEnabled;

public:
    /**
     * @brief Initialize the audio manager.
     */
    static void init();

    /**
     * @brief Update the listener state.
     * 
     * @param pos Position of the listener.
     * @param vel Velocity of the listener.
     * @param forward The forward vector.
     * @param up The up vector.
     */
    static void updateListener(
        glm::vec3 pos,
        glm::vec3 vel,
        glm::vec3 forward,
        glm::vec3 up
    );

    /**
     * @brief Called on each main loop iteration.
     * 
     * Updates the volume and performs other maintainance.
     */
    static void update();

    /**
     * @brief Shut down the audio manager.
     */
    static void shutdown();
};

#endif