#ifndef VULKAN_SURFACE_HPP_
#define VULKAN_SURFACE_HPP_

#include <memory>

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

namespace Vk
{
    /**
     * @brief Represents a Vulkan window surface.
     */
    class Surface
    {
    private:
        std::shared_ptr<Vk::Instance> m_instance;
        VkSurfaceKHR m_surface;
    
    public:
        /**
         * @brief Construct a surface.
         * 
         * @param window The SDL window.
         * @param instance The Vulkan instance.
         */
        Surface(SDL_Window *window, std::shared_ptr<Vk::Instance> instance);
        Surface(const Surface &) = delete;
        ~Surface();

        /**
         * @brief Return the wrapped surface.
         */
        VkSurfaceKHR inner();
    };
}

#endif