#pragma once

#include "copium/core/Device.h"
#include "copium/core/Instance.h"
#include "copium/core/SwapChain.h"
#include "copium/core/Window.h"
#include "copium/util/Common.h"

#include <memory>

namespace Copium
{
  class Vulkan
  {
    CP_STATIC_CLASS(Vulkan);
  private:
    static std::unique_ptr<Instance> instance;
    static std::unique_ptr<Window> window;
    static std::unique_ptr<Device> device;
    static std::unique_ptr<SwapChain> swapChain;
  public:
    static void Initialize();
    static void Destroy();
    static Instance& GetInstance();
    static Window& GetWindow();
    static Device& GetDevice();
    static SwapChain& GetSwapChain();
    static bool Valid();
 
  };
}