package glfw

when ODIN_OS == "windows" {
	import win32 "core:sys/windows"
	
	foreign import glfw { "lib/glfw3.lib", "system:user32.lib", "system:gdi32.lib", "system:shell32.lib" }
	
	@(default_calling_convention="c", link_prefix="glfw")
	foreign glfw {
		GetWin32Adapter :: proc(monitor: MonitorHandle) -> cstring ---
		GetWin32Monitor :: proc(monitor: MonitorHandle) -> cstring ---
		GetWin32Window  :: proc(window: WindowHandle) -> win32.HWND ---
		GetWGLContext   :: proc(window: WindowHandle) -> rawptr ---
	}
} else when ODIN_OS == "linux" {
	// TODO: Native Linux
	// Display* glfwGetX11Display(void);
	// RRCrtc glfwGetX11Adapter(GLFWmonitor* monitor);
	// RROutput glfwGetX11Monitor(GLFWmonitor* monitor);
	// Window glfwGetX11Window(GLFWwindow* window);
	// void glfwSetX11SelectionString(const char* string);
	// const char* glfwGetX11SelectionString(void);
	
	// struct wl_display* glfwGetWaylandDisplay(void);
	// struct wl_output* glfwGetWaylandMonitor(GLFWmonitor* monitor);
	// struct wl_surface* glfwGetWaylandWindow(GLFWwindow* window);
} else when ODIN_OS == "darwin" {
	// TODO: Native Darwin
	// CGDirectDisplayID glfwGetCocoaMonitor(GLFWmonitor* monitor);
	// id glfwGetCocoaWindow(GLFWwindow* window);
	// id glfwGetNSGLContext(GLFWwindow* window);
}

