module main

import gg
import gx

struct App {
mut:
	gg       &gg.Context = unsafe { nil }
	rotation f32 = f32(0)
	edge     int = 3
}

fn main() {
	println('rotation: left arrow key, right arrow key')
	println('center polygon edge: up arrow key, down arrow key')

	mut app := &App{}

	app.gg = gg.new_context(
		window_title: 'Simple Polygons'
		width: 500
		height: 500
		bg_color: gx.black
		event_fn: event
		frame_fn: render
		user_data: app
	)

	app.gg.run()
}

fn render(app &App) {
	app.gg.begin()

	color := gx.Color{
		r: 175
		g: 0
		b: 0
		a: 200
	}
	mut edge := 3
	for i := 0; i <= 5; i++ {
		for j := 0; j <= 5; j++ {
			if i == 0 || j == 0 || i == 5 || j == 5 {
				app.gg.draw_polygon_filled(50 + 80 * i, 50 + 80 * j, 30, edge, app.rotation,
					color)
				edge++
			}
		}
	}

	app.gg.draw_polygon_filled(250, 250, 150, app.edge, app.rotation, color)

	app.gg.end()
}

fn event(e &gg.Event, mut app App) {
	match e.typ {
		.key_down {
			match e.key_code {
				.up {
					app.edge++
				}
				.down {
					if app.edge > 3 {
						app.edge--
					}
				}
				.right {
					app.rotation++
				}
				.left {
					app.rotation--
				}
				.escape {
					app.gg.quit()
				}
				else {}
			}
		}
		else {}
	}
}
