package de.oaa.xxx.games.vanilla.entity;

import de.oaa.xxx.games.bdsm.GeschlechtEnum;
import de.oaa.xxx.games.bdsm.RolleEnum;
import de.oaa.xxx.games.common.aufgaben.Werkzeug;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

@Getter @Setter @Entity @Table(name = "vanilla_mitspieler")
public class VanillaMitspielerEntity {
    @Id @Column private UUID mitspielerId;
    @Column private UUID userId;
    @Column private boolean eigenesGeraet;
    @Column private String name;
    @Enumerated(EnumType.STRING) @Column private GeschlechtEnum geschlecht;
    @Enumerated(EnumType.STRING)
    @ElementCollection(targetClass = Werkzeug.class, fetch = FetchType.EAGER)
    @CollectionTable(name = "vanilla_mitspieler_werkzeuge", joinColumns = @JoinColumn(name = "mitspielerId"))
    @Column(name = "werkzeug") private List<Werkzeug> werkzeuge = new ArrayList<>();
    @Enumerated(EnumType.STRING)
    @ElementCollection(targetClass = GeschlechtEnum.class, fetch = FetchType.EAGER)
    @CollectionTable(name = "vanilla_mitspieler_spieltMit", joinColumns = @JoinColumn(name = "mitspielerId"))
    @Column(name = "geschlecht") private List<GeschlechtEnum> spieltMit = new ArrayList<>();
    @Enumerated(EnumType.STRING)
    @ElementCollection(targetClass = RolleEnum.class, fetch = FetchType.EAGER)
    @CollectionTable(name = "vanilla_mitspieler_rollen", joinColumns = @JoinColumn(name = "mitspielerId"))
    @Column(name = "rolle") private List<RolleEnum> rollen = new ArrayList<>();
    @ManyToOne @JoinColumn(name = "sessionId", nullable = false) private VanillaGameEntity session;

    public de.oaa.xxx.games.vanilla.VanillaMitspieler toMitspieler() {
        de.oaa.xxx.games.vanilla.VanillaMitspieler m = new de.oaa.xxx.games.vanilla.VanillaMitspieler();
        m.setGeschlecht(geschlecht); m.setId(mitspielerId); m.setUserId(userId);
        m.setEigenesGeraet(eigenesGeraet); m.setName(name); m.setRollen(rollen);
        m.setSpieltMit(spieltMit); m.setVerfuegbareWerkzeuge(new ArrayList<>(werkzeuge));
        return m;
    }
}
