#pragma once

#include <vulkan/vulkan_core.h>
#define GLFW_INCLUDE_VULKAN
#include <GLFW/glfw3.h>

#include <vector>

struct FFramebufferConfig
{
	VkDevice				 Device;
	VkRenderPass			 RenderPass;
	std::vector<VkImageView> SwapChainImageViews;
	VkExtent2D				 SwapChainExtent;
};

class VulkanFramebuffers
{
public:
	void Initialize(FFramebufferConfig InConfig);

	void Cleanup();

	void CreateFramebuffers();
	// void CreateFramebuffers(VkRenderPass RenderPass, std::vector<VkImageView> SwapChainImageViews, VkExtent2D SwapChainExtent);

	std::vector<VkFramebuffer> GetSwapChainFrameBuffers() { return SwapChainFramebuffers; }

	// void CreateCommandPool(std::optional<uint32_t> GraphicsFamily);
	//
	// void CreateCommandBuffer();
	//
	// void RecordCommandBuffer(VkCommandBuffer CommandBuffer, uint32_t imageIndex, VkRenderPass RenderPass, VkExtent2D SwapChainExtent, VkPipeline GraphicsPipeline);

private:
	FFramebufferConfig FramebufferConfig;

	std::vector<VkFramebuffer> SwapChainFramebuffers;
};
