package de.oaa.xxx.session.entity;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.Id;
import jakarta.persistence.OneToMany;
import jakarta.persistence.Table;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

@Entity
@Table(name = "session")
public class SessionEntity {

    @Id
    @Column
    private UUID sessionId;
    @Column(unique = true)
    private UUID userId;
    @Column
    private LocalDateTime startZeit;
    @Column
    private LocalDateTime letzteAktivitaet;
    @OneToMany(mappedBy = "session", fetch = FetchType.EAGER)
    private List<MitspielerEntity> mitspieler = new ArrayList<>();
    @OneToMany(mappedBy = "session", fetch = FetchType.EAGER)
    private List<AktiveSperreEntity> aktiveSperren = new ArrayList<>();
    @Column
    private Integer wahrscheinlichkeitSperre;
    @Column
    private Integer wahrscheinlichkeitStrafe;
    @Column
    private Integer aufgabenProLevel;
    @Column
    private Integer level;
    @Column
    private Integer aufgabenAufAktuellemLevel;
    @Column(columnDefinition = "TEXT")
    private String aufgaben;
    @Column
    private Double zeitfaktorZeitstrafen;

    public UUID getSessionId() { return sessionId; }
    public void setSessionId(UUID sessionId) { this.sessionId = sessionId; }

    public UUID getUserId() { return userId; }
    public void setUserId(UUID userId) { this.userId = userId; }

    public LocalDateTime getStartZeit() { return startZeit; }
    public void setStartZeit(LocalDateTime startZeit) { this.startZeit = startZeit; }

    public LocalDateTime getLetzteAktivitaet() { return letzteAktivitaet; }
    public void setLetzteAktivitaet(LocalDateTime letzteAktivitaet) { this.letzteAktivitaet = letzteAktivitaet; }

    public List<MitspielerEntity> getMitspieler() { return mitspieler; }
    public void setMitspieler(List<MitspielerEntity> mitspieler) { this.mitspieler = mitspieler; }

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

    public Integer getWahrscheinlichkeitSperre() { return wahrscheinlichkeitSperre; }
    public void setWahrscheinlichkeitSperre(Integer wahrscheinlichkeitSperre) { this.wahrscheinlichkeitSperre = wahrscheinlichkeitSperre; }

    public Integer getWahrscheinlichkeitStrafe() { return wahrscheinlichkeitStrafe; }
    public void setWahrscheinlichkeitStrafe(Integer wahrscheinlichkeitStrafe) { this.wahrscheinlichkeitStrafe = wahrscheinlichkeitStrafe; }

    public Integer getAufgabenProLevel() { return aufgabenProLevel; }
    public void setAufgabenProLevel(Integer aufgabenProLevel) { this.aufgabenProLevel = aufgabenProLevel; }

    public Integer getLevel() { return level; }
    public void setLevel(Integer level) { this.level = level; }

    public Integer getAufgabenAufAktuellemLevel() { return aufgabenAufAktuellemLevel; }
    public void setAufgabenAufAktuellemLevel(Integer aufgabenAufAktuellemLevel) { this.aufgabenAufAktuellemLevel = aufgabenAufAktuellemLevel; }

    public String getAufgaben() { return aufgaben; }
    public void setAufgaben(String aufgaben) { this.aufgaben = aufgaben; }

    public Double getZeitfaktorZeitstrafen() { return zeitfaktorZeitstrafen; }
    public void setZeitfaktorZeitstrafen(Double zeitfaktorZeitstrafen) { this.zeitfaktorZeitstrafen = zeitfaktorZeitstrafen; }
}
