#ifndef VULKAN_SEMAPHORE_HPP_
#define VULKAN_SEMAPHORE_HPP_

#include <memory>

#include <Utilities/Extern.hpp>
#include <Vk/Device/Device.hpp>

namespace Vk
{
    /**
     * @brief Represents a Vulkan semaphore.
     */
    class Semaphore
    {
    private:
        std::shared_ptr<Vk::Device> m_device;
        VkSemaphore m_semaphore;
    
    public:
        /**
         * @brief Construct a semaphore on the specified device.
         * 
         * @param device The device on which to create the semaphore.
         */
        Semaphore(std::shared_ptr<Vk::Device> device);
        Semaphore(const Semaphore &) = delete;
        ~Semaphore();

        /**
         * @brief Return the wrapped semaphore.
         */
        VkSemaphore inner();
    };
}

#endif