stn := @use("../../stn/src/lib.hb");
.{string, memory, buffer, log} := stn

render := @use("../../../libraries/render/src/lib.hb")

input := @use("../../intouch/src/lib.hb")

widgets := @use("widgets/widgets.hb")
ui := @use("ui.hb")

WindowID := struct {
	host_id: uint,
	window_id: uint,
}

VoidWindowID := WindowID.(0, 0)

create_window := fn(channel: uint): ^render.Surface {
	// get the horizon buffer
	// request a new window and provide the callback buffer
	// wait to recieve a message

	windowing_system_buffer := buffer.search("XHorizon")
	mem_buf := memory.request_page(1, false)

	if windowing_system_buffer == 0 {
		return @as(^render.Surface, idk)
	} else {
		x := 0
		loop if x > 1000 break else x += 1

		ret := buffer.recv([4096]u8, windowing_system_buffer, mem_buf)
		if ret == null {
			log.info("No messages")
		}

		if *mem_buf == 0 {
			log.info("No messages")
		}

		return @as(^render.Surface, idk)
	}
}