package de.oaa.xxx.aufgaben;

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

import de.oaa.xxx.framework.XXXEntity;
import jakarta.persistence.CascadeType;
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.JoinTable;
import jakarta.persistence.ManyToMany;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;

@Entity
@Table(name = "sperre")
public class SperreEntity implements XXXEntity {

	@Id
	@Column
	private UUID sperreId;
	@Column
	private String kurzText;
	@Column
	private String text;
	@Column
	private String releaseText;
	@ManyToOne
	@JoinColumn(name="gruppeId")
	private AufgabenGruppeEntity aufgabenGruppe;
	@Column
	@Enumerated
	@ElementCollection(targetClass = Werkzeug.class)
	private List<Werkzeug> sperreFuer;
	@Column
	private Integer minutenVon;
	@Column
	private Integer minutenBis;
	@ManyToMany(cascade = CascadeType.DETACH)
	@JoinTable(
			name = "sperreToy",
			joinColumns = {@JoinColumn( name = "sperreId")},
			inverseJoinColumns = { @JoinColumn(name = "toyId")})
	private List<ToyEntity> benoetigteToys;
	public UUID getSperreId() {
		return sperreId;
	}
	public void setSperreId(UUID sperreId) {
		this.sperreId = sperreId;
	}
	public String getKurzText() {
		return kurzText;
	}
	public void setKurzText(String kurzText) {
		this.kurzText = kurzText;
	}
	public String getText() {
		return text;
	}
	public void setText(String text) {
		this.text = text;
	}
	public String getReleaseText() {
		return releaseText;
	}
	public void setReleaseText(String releaseText) {
		this.releaseText = releaseText;
	}
	public List<Werkzeug> getSperreFuer() {
		return sperreFuer;
	}
	public void setSperreFuer(List<Werkzeug> sperreFuer) {
		this.sperreFuer = sperreFuer;
	}
	public Integer getMinutenVon() {
		return minutenVon;
	}
	public void setMinutenVon(Integer minutenVon) {
		this.minutenVon = minutenVon;
	}
	public Integer getMinutenBis() {
		return minutenBis;
	}
	public void setMinutenBis(Integer minutenBis) {
		this.minutenBis = minutenBis;
	}
	public List<ToyEntity> getBenoetigteToys() {
		return benoetigteToys;
	}
	public void setBenoetigteToys(List<ToyEntity> benoetigteToys) {
		this.benoetigteToys = benoetigteToys;
	}
	public AufgabenGruppeEntity getAufgabenGruppe() {
		return aufgabenGruppe;
	}
	public void setAufgabenGruppe(AufgabenGruppeEntity aufgabenGruppe) {
		this.aufgabenGruppe = aufgabenGruppe;
	}
	public Sperre toSperre() {
		Sperre sperre = new Sperre();
		sperre.setSperreId(sperreId);
		sperre.setGruppeId(aufgabenGruppe.getGruppenId());
		sperre.setKurzText(kurzText);
		sperre.setMinutenBis(minutenBis);
		sperre.setMinutenVon(minutenVon);
		sperre.setReleaseText(releaseText);
		sperre.setSperreFuer(sperreFuer.stream().map(fuer -> fuer).toList());
		sperre.setText(text);
		return sperre;
	}
	
	public static SperreEntity create(Sperre sperre, AufgabenGruppeEntity aufgabenGruppeEntity) {
		SperreEntity entity = new SperreEntity();
		entity.setSperreId(UUID.randomUUID());
		entity.setAufgabenGruppe(aufgabenGruppeEntity);
		entity.setBenoetigteToys(sperre.getBenoetigteToys().stream().map(toy -> ToyEntity.create(toy, aufgabenGruppeEntity)).toList());
		entity.setKurzText(sperre.getKurzText());
		entity.setMinutenBis(sperre.getMinutenBis());
		entity.setMinutenVon(sperre.getMinutenVon());
		entity.setReleaseText(sperre.getReleaseText());
		entity.setSperreFuer(sperre.getSperreFuer());
		entity.setText(sperre.getText());
		return entity;
	}
}
