package de.oaa.xxx.games.bdsm.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 lombok.Getter;
import lombok.Setter;

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

@Getter
@Setter
@Entity
@Table(name = "bdsm_game")
public class BdsmGameEntity {

    @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;
    @Column(columnDefinition = "TEXT")
    private String activeTaskJson;
    @Column
    private LocalDateTime taskStartedAt;
    @Column
    private UUID setupId;

    @Override
    public String toString() {
        return "BdsmGameEntity[sessionId=" + sessionId + ", userId=" + userId
                + ", level=" + level + ", aufgaben=" + aufgabenAufAktuellemLevel + "/" + aufgabenProLevel
                + ", pStrafe=" + wahrscheinlichkeitStrafe + "%, pSperre=" + wahrscheinlichkeitSperre + "%"
                + ", zeitfaktor=" + zeitfaktorZeitstrafen + ", start=" + startZeit + "]";
    }
}
