package systems

import (
	"fmt"
	"lab.zaar.be/thefish/alchemyst-go/engine/ecs"
	"lab.zaar.be/thefish/alchemyst-go/engine/gamemap"
	"lab.zaar.be/thefish/alchemyst-go/engine/types"
	"lab.zaar.be/thefish/alchemyst-go/ui/mainwindow"
)

type MobRenderSystem struct {
	Controller *ecs.Controller
	Layer      *mainwindow.Layer
	Viewport   *mainwindow.ViewPort
	*gamemap.Level
}

func (mrs MobRenderSystem) Process(){
	for e := range mrs.Controller.GetEntities() {
		if mrs.Controller.HasComponent(e, ecs.CoordsComponent) &&
			mrs.Controller.HasComponent(e, ecs.AppearanceComponent) {

			pos := mrs.Controller.GetComponent(e, ecs.CoordsComponent).(types.Coords)
			appearance := mrs.Controller.GetComponent(e, ecs.AppearanceComponent).(types.Appearance)

			vpc, err := mrs.Viewport.ToVPCoords(pos)
			if err != nil {
				fmt.Printf("Err: " , err)
			}
			mrs.Layer.WithRawColor(appearance.ColorSet.Fg.GetColor()).Put(vpc.X, vpc.Y, appearance.Glyph.GetGlyph())
		}
	}
}

func (mrs MobRenderSystem) SystemType() string {
	return ecs.MobRenderSystem
}