package components

import (
	"github.com/hajimehoshi/ebiten/v2"
	"github.com/mlange-42/arche/ecs"
)

// the  Bond components  binds  two different  entities together,  one
// manipulates the other
type Bond struct {
	ecs.Relation
	Id, Ref string
}

// A door  has a relation  to a switch  using the Bond  component. The
// Switch opens or  closes the door, depending on  player actions. The
// door itself is merely dump and just does what being told.

type Door struct {
	IsOpen      bool
	OpenSprite  *ebiten.Image
	CloseSprite *ebiten.Image
	Id          string
}

func (door *Door) Toggle() {
	door.IsOpen = !door.IsOpen
}

func (door *Door) Sprite() *ebiten.Image {
	if door.IsOpen {
		return door.OpenSprite
	}

	return door.CloseSprite
}

// the switch is being activated when  the player runs over it, it can
// either use a timeout or just stay in its switching position
type Switch struct {
	IsOpen      bool
	OpenSprite  *ebiten.Image
	CloseSprite *ebiten.Image
	Ref         string // the IId of the door
}

func (switcher *Switch) Toggle() {
	switcher.IsOpen = !switcher.IsOpen
}

func (switcher *Switch) Sprite() *ebiten.Image {
	if switcher.IsOpen {
		return switcher.OpenSprite
	}

	return switcher.CloseSprite
}
