import Foundation
import simd
import JolkEngine


@main struct Program
{
	static func main()
	{
		Application(
			application: CavesOfJolk(),
			config: ApplicationConfiguration(
				resizable: true,
				vSync: .on,
				windowWidth: 1280,
				windowHeight: 720,
				title: "Caves of Swift",
				bundle: Bundle.module)
			).run()
	}
}

class CavesOfJolk: ApplicationImplementation
{
	private lazy var scene = Scene1()
	//private lazy var scene = CaveScene()
	private var aspect: Float = 0
	private var frameCount = 0
	private var frameTimer: Float = 1

	func create(render: inout Renderer)
	{
		scene.setup(render: &render)
	}

	func loadContent(content: inout ContentManager) throws
	{
		try scene.loadContent(content: &content)
	}

	func resize(width: Int, height: Int)
	{
		aspect = Float(width) / Float(height)
		print(aspect)
	}

	func update(deltaTime: Float)
	{
		scene.update(deltaTime: deltaTime)

		frameCount += 1
		frameTimer -= deltaTime
		if frameTimer <= 0
		{
			print("FPS: \(frameCount)")
			frameCount = 0
			frameTimer += 1.0
		}
	}

	func draw(render: inout Renderer, deltaTime: Float)
	{
		if Input.instance.keyboard.keyPressed(.w, repeat: true) { render.wireframe = !render.wireframe }

		scene.draw(render: &render, deltaTime: deltaTime, aspectRatio: aspect)
	}
}
