#ifndef VULKAN_FRAMEBUFFER_HPP_
#define VULKAN_FRAMEBUFFER_HPP_

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

namespace Vk
{
    /**
     * @brief Represents a Vulkan framebuffer.
     */
    class Framebuffer
    {
    private:
        std::shared_ptr<Vk::Device> m_device;
        std::shared_ptr<Vk::RenderPass> m_renderPass;
        std::vector<std::shared_ptr<Vk::ImageView>> m_attachments;
        VkFramebuffer m_framebuffer;
    
    public:
        Framebuffer(
            std::shared_ptr<Vk::Device> device,
            std::shared_ptr<Vk::RenderPass> renderPass,
            std::vector<std::shared_ptr<Vk::ImageView>> attachments,
            int width, int height
        );
        Framebuffer(const Framebuffer &) = delete;
        ~Framebuffer();

        /**
         * @brief Return the wrapped framebuffer.
         */
        VkFramebuffer inner();
    };
}

#endif