package karl2d_minimal_example

import k2 "../.."
import "core:mem"
import "core:log"
import "core:fmt"
import "base:runtime"

_ :: fmt
_ :: mem
tex: k2.Texture
default_context: runtime.Context
track: mem.Tracking_Allocator

main :: proc() {
	when ODIN_DEBUG {
		mem.tracking_allocator_init(&track, context.allocator)
		context.allocator = mem.tracking_allocator(&track)
	}

	context.logger = log.create_console_logger()
	default_context = context

	k2.init(1080, 1080, "Karl2D Minimal Program")
	//7k2.set_window_position(300, 100)
	tex = k2.load_texture_from_bytes(#load("sixten.jpg"),)

	when ODIN_OS != .JS {
		for !k2.shutdown_wanted() {
			step(0)
		}
			
		k2.destroy_texture(tex)
		k2.shutdown()
	}
}

shutdown :: proc() {
	if len(track.allocation_map) > 0 {
		for _, entry in track.allocation_map {
			fmt.eprintf("%v leaked: %v bytes\n", entry.location, entry.size)
		}
	}
	mem.tracking_allocator_destroy(&track)
}

@export
step :: proc(dt: f64) -> bool {
	context = default_context
	k2.process_events()
	k2.clear(k2.BLUE)

	k2.draw_rect({10, 10, 60, 60}, k2.GREEN)
	k2.draw_rect({20, 20, 40, 40}, k2.BLACK)
	k2.draw_circle({120, 40}, 30, k2.BLACK)
	k2.draw_circle({120, 40}, 20, k2.GREEN)
	k2.draw_text("Hellöpe!", {10, 100}, 64, k2.WHITE)
	k2.draw_texture_ex(tex, {0, 0, f32(tex.width), f32(tex.height)}, {10, 200, 900, 500}, {}, 0)

	k2.present()
	free_all(context.temp_allocator)
	return true
}