package de.oaa.xxx.session.aufgaben;

import de.oaa.xxx.session.Mitspieler;
import de.oaa.xxx.session.Werkzeug;

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

public class Aufgabe {

    private UUID aufgabeId;
    private String kurzText;
    private String text;
    private Integer level;
    private Integer sekundenVon;
    private Integer sekundenBis;
    private UUID gruppeId;
    private List<Werkzeug> benoetigtAktiv;
    private List<Werkzeug> benoetigtPassiv;

    public UUID getAufgabeId() { return aufgabeId; }
    public void setAufgabeId(UUID aufgabeId) { this.aufgabeId = aufgabeId; }

    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 Integer getLevel() { return level; }
    public void setLevel(Integer level) { this.level = level; }

    public Integer getSekundenVon() { return sekundenVon; }
    public void setSekundenVon(Integer sekundenVon) { this.sekundenVon = sekundenVon; }

    public Integer getSekundenBis() { return sekundenBis; }
    public void setSekundenBis(Integer sekundenBis) { this.sekundenBis = sekundenBis; }

    public UUID getGruppeId() { return gruppeId; }
    public void setGruppeId(UUID gruppeId) { this.gruppeId = gruppeId; }

    public List<Werkzeug> getBenoetigtAktiv() { return benoetigtAktiv; }
    public void setBenoetigtAktiv(List<Werkzeug> benoetigtAktiv) { this.benoetigtAktiv = benoetigtAktiv; }

    public List<Werkzeug> getBenoetigtPassiv() { return benoetigtPassiv; }
    public void setBenoetigtPassiv(List<Werkzeug> benoetigtPassiv) { this.benoetigtPassiv = benoetigtPassiv; }

    public boolean isAufgabePassend(int level, Mitspieler aktiv, Mitspieler passiv) {
        if (level != this.level && level - 1 != this.level) {
            return false;
        }
        if (benoetigtPassiv != null) {
            for (Werkzeug werkzeug : benoetigtPassiv) {
                if (!passiv.isVerfuegbar(werkzeug)) {
                    return false;
                }
            }
        }
        if (benoetigtAktiv == null || benoetigtAktiv.isEmpty()) {
            return true;
        } else {
            for (Werkzeug werkzeug : benoetigtAktiv) {
                if (aktiv.isVerfuegbar(werkzeug)) {
                    return true;
                }
            }
            return false;
        }
    }
}
