#pragma once

#include <array>
#include <vulkan/vulkan.hpp>

#include "types.hpp"

namespace constants {
  // Window dimensions
  constexpr i32 WIDTH  = 1920;
  constexpr i32 HEIGHT = 1080;

  // Camera settings
  constexpr f64 CAMERA_SPEED = 1.0;

  // Frame processing
  constexpr i32 MAX_FRAMES_IN_FLIGHT = 2;

  // Shader paths
  constexpr const char* VERTEX_SHADER_PATH             = "shaders/vertex.glsl";
  constexpr const char* FRAGMENT_SHADER_PATH           = "shaders/fragment.glsl";
  constexpr const char* CROSSHAIR_VERTEX_SHADER_PATH   = "shaders/crosshair_vertex.glsl";
  constexpr const char* CROSSHAIR_FRAGMENT_SHADER_PATH = "shaders/crosshair_fragment.glsl";

// Validation layers
#ifndef NDEBUG
  constexpr std::array<const char*, 1> validationLayers = { "VK_LAYER_KHRONOS_validation" };
#endif

// Device extensions
#ifdef __APPLE__
  constexpr std::array<const char*, 2> deviceExtensions = { vk::KHRSwapchainExtensionName,
                                                            vk::KHRPortabilitySubsetExtensionName };
#else
  constexpr std::array<const char*, 1> deviceExtensions = { vk::KHRSwapchainExtensionName };
#endif
}
