package main

/*
#cgo CFLAGS: -I../_raylib-5.5_linux_amd64/include
#cgo LDFLAGS: -L../_raylib-5.5_linux_amd64/lib -l:libraylib.a -lm
#include <raylib.h>
*/
import "C"
import "time"

const (
	windowWidth  = 800
	windowHeight = 600
	logoHeight   = 64
	logoSpeed    = 300.0
)

func main() {
	C.InitWindow(windowWidth, windowHeight, C.CString("Raylib in Go"))
	C.SetTargetFPS(60)
	C.SetRandomSeed(C.uint(time.Now().Unix()))

	logoImage := C.LoadImage(C.CString("./go_logo.png"))
	C.ImageResize(&logoImage, logoImage.width*logoHeight/logoImage.height, logoHeight)
	logoTexture := C.LoadTextureFromImage(logoImage)
	C.UnloadImage(logoImage)

	x := float32(C.GetRandomValue(0, windowWidth-C.int(logoTexture.width)))
	y := float32(C.GetRandomValue(0, windowHeight-C.int(logoTexture.height)))

	dx := float32(logoSpeed)
	if C.GetRandomValue(0, 1) == 1 {
		dx = -dx
	}
	dy := float32(logoSpeed)
	if C.GetRandomValue(0, 1) == 1 {
		dy = -dy
	}

	black := C.Color{0, 0, 0, 255}
	white := C.Color{255, 255, 255, 255}

	for !bool(C.WindowShouldClose()) {
		deltaTime := float32(C.GetFrameTime())

		x += dx * deltaTime
		y += dy * deltaTime

		if x < 0 || x+float32(logoTexture.width) >= windowWidth-1 {
			dx *= -1
			x += dx * deltaTime
		}
		if y < 0 || y+float32(logoTexture.height) >= windowHeight-1 {
			dy *= -1
			y += dy * deltaTime
		}

		C.BeginDrawing()
		C.ClearBackground(black)
		C.DrawTextureV(logoTexture, C.Vector2{x: C.float(x), y: C.float(y)}, white)
		C.EndDrawing()
	}

	C.UnloadTexture(logoTexture)
	C.CloseWindow()
}
