package systems

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

type MobRenderSystem struct {
	EntityController *ecs.Controller
	Layer *mainwindow.Layer
}

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

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

			//fixme
			// Clear the cell this entity occupies, so it is the only glyph drawn there
			for i := 0; i <= 2; i++ {
				mrs.Layer.ClearArea(pos.X, pos.Y,1,1)
				//gogue.ClearArea(pos.X, pos.Y, 1, 1, i)
			}
			//fixme
			mrs.Layer.WithRawColor(appearance.ColorSet.Fg.GetColor()).Put(pos.X, pos.Y, appearance.Glyph)
			//gogue.PrintGlyph(pos.X, pos.Y, appearance.Glyph, "", appearance.Layer)
		}
	}
}

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