package main

import (
	"log"

	"github.com/kettek/goro"

	"steel/entity"
	"steel/mapping"
)

func main() {
	// Initialize goro!
	if err := goro.InitTCell(); err != nil {
		log.Fatal(err)
	}
	goro.Run(func(screen *goro.Screen) {
		// Screen configuration.
		screen.SetTitle("Steel Lord")
		screen.SetSize(60, 14)

		// Our initial variables.
		mapWidth, mapHeight := 80, 24

		colors := map[string]goro.Color{
			"darkWall":	goro.Color{R: 0, G: 0, B: 100, A:255},
			"darkGround": goro.Color{R: 50, G: 50, B: 150, A: 255},
		}

		gameMap := mapping.GameMap{
			Width: mapWidth,
			Height: mapHeight,
		}

		gameMap.Initialize()

		player := entity.NewEntity(screen.Columns/2, screen.Rows/2, '@', goro.Style{Foreground: goro.ColorWhite})
			npc := entity.NewEntity(screen.Columns/2-5, screen. Rows/2, '@', goro.Style{Foreground: goro.ColorYellow})
			
			entities := []*entity.Entity{
				player,
				npc,
			}
			


		// The game loop.
		for {
			// Draw screen.
			DrawAll(screen, entities, gameMap, colors)
			ClearAll(screen, entities)
			// Handle events.
			switch event := screen.WaitEvent().(type) {
			case goro.EventKey:
				switch action := handleKeyEvent(event).(type) {
				case ActionMove:
					if !gameMap.IsBlocked(player.X+action.X, player.Y+action.Y) {
						player.Move(action.X, action.Y)
					}
				case ActionQuit:
					goro.Quit()
				}
			case goro.EventQuit:
				return
			}
		}
	})
}
