#+private
package platform

import "vendor:glfw"

Window :: struct {
	handle:  glfw.WindowHandle,
	backend: Windowing_Backend,
}

Windowing_Backend :: enum {
	Auto = 0,
	GLFW,
	XCB,
	Wayland,
}

window_create :: proc() -> ^Window {
	window := new(Window)

	glfw.Init()

	window.handle = glfw.CreateWindow(640, 480, "Tessel", nil, nil)
	window.backend = .GLFW

	glfw.MakeContextCurrent(window.handle)

	return window
}

window_destroy :: proc(window: ^Window) {
	glfw.DestroyWindow(window.handle)
	glfw.Terminate()

	free(window)
}

window_should_close :: proc(window: ^Window) -> bool {
	return bool(glfw.WindowShouldClose(window.handle))
}

window_swap_buffers :: proc(window: ^Window) {
	glfw.SwapBuffers(window.handle)
}

window_poll_events :: proc(window: ^Window) {
	glfw.PollEvents()
}