#ifndef VULKAN_COMMAND_POOL_HPP_
#define VULKAN_COMMAND_POOL_HPP_

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

namespace Vk
{
    /**
     * @brief Represents a Vulkan command pool.
     */
    class CommandPool
    {
    private:
        std::shared_ptr<Vk::Device> m_device;
        VkCommandPool m_commandPool;
    
    public:
        /**
         * @brief Construct a command pool.
         * 
         * @param device The device on which to create the command pool.
         * @param flags The command pool flags.
         * @param queueFamilyIndex The queue family index.
         */
        CommandPool(
            std::shared_ptr<Vk::Device> device,
            VkCommandPoolCreateFlags flags,
            uint32_t queueFamilyIndex
        );
        CommandPool(const CommandPool &) = delete;
        ~CommandPool();

        /**
         * @brief Return the wrapped command pool.
         */
        VkCommandPool inner();
    };
}

#endif