package de.oaa.xxx.session.entity;

import java.util.List;
import java.util.UUID;

import de.oaa.xxx.framework.XXXEntity;
import de.oaa.xxx.session.GeschlechtEnum;
import de.oaa.xxx.session.Mitspieler;
import de.oaa.xxx.session.RolleEnum;
import de.oaa.xxx.session.Werkzeug;
import jakarta.persistence.Column;
import jakarta.persistence.ElementCollection;
import jakarta.persistence.Entity;
import jakarta.persistence.Enumerated;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.OneToMany;
import jakarta.persistence.Table;

@Entity
@Table(name = "mitspieler")
public class MitspielerEntity implements XXXEntity {

	@Id
	@Column
	private UUID mitspielerId;
	@Column
	private String name;
	@Column
	private GeschlechtEnum geschlecht;
	@Column
	@Enumerated
	@ElementCollection(targetClass = Werkzeug.class)
	private List<Werkzeug> werkzeuge;
	@Column
	@Enumerated
	@ElementCollection(targetClass = GeschlechtEnum.class)
	private List<GeschlechtEnum> spieltMit;
	@Column
	@Enumerated
	@ElementCollection(targetClass = RolleEnum.class)
	private List<RolleEnum> rollen;
	@ManyToOne
	@JoinColumn(name = "sessionId", nullable = false)
	private SessionEntity session;
	@OneToMany(mappedBy = "mitspieler")
	private List<AktiveSperreEntity> aktiveSperren;

	public UUID getMitspielerId() {
		return mitspielerId;
	}

	public void setMitspielerId(UUID mitspielerId) {
		this.mitspielerId = mitspielerId;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public GeschlechtEnum getGeschlecht() {
		return geschlecht;
	}

	public void setGeschlecht(GeschlechtEnum geschlecht) {
		this.geschlecht = geschlecht;
	}

	public List<Werkzeug> getWerkzeuge() {
		return werkzeuge;
	}

	public void setWerkzeuge(List<Werkzeug> werkzeuge) {
		this.werkzeuge = werkzeuge;
	}

	public List<GeschlechtEnum> getSpieltMit() {
		return spieltMit;
	}

	public void setSpieltMit(List<GeschlechtEnum> spieltMit) {
		this.spieltMit = spieltMit;
	}

	public List<RolleEnum> getRollen() {
		return rollen;
	}

	public void setRollen(List<RolleEnum> rollen) {
		this.rollen = rollen;
	}

	public SessionEntity getSession() {
		return session;
	}

	public void setSession(SessionEntity session) {
		this.session = session;
	}

	public List<AktiveSperreEntity> getAktiveSperren() {
		return aktiveSperren;
	}

	public void setAktiveSperren(List<AktiveSperreEntity> aktiveSperren) {
		this.aktiveSperren = aktiveSperren;
	}

	public Mitspieler toMitspieler() {
		Mitspieler mitspieler = new Mitspieler();
		mitspieler.setGeschlecht(geschlecht);
		mitspieler.setId(mitspielerId);
		mitspieler.setName(name);
		mitspieler.setRollen(rollen);
		mitspieler.setSpieltMit(spieltMit);
		mitspieler.setVerfuegbareWerkzeuge(werkzeuge);
		return mitspieler;
	}
}
