package de.oaa.xxx.meldung;

import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;

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

@Getter
@Setter
@Entity
@Table(name = "meldung", uniqueConstraints = {
    @UniqueConstraint(columnNames = {"melder_id", "ziel_typ", "ziel_id"})
})
public class MeldungEntity {

    @Id
    @Column
    private UUID meldungId;

    @Column(name = "melder_id", nullable = false)
    private UUID melderId;

    @Enumerated(EnumType.STRING)
    @Column(name = "ziel_typ", length = 10, nullable = false)
    private MeldungZielTyp zielTyp;

    @Column(name = "ziel_id", nullable = false)
    private UUID zielId;

    @Column(columnDefinition = "TEXT")
    private String grund;

    @Column(nullable = false)
    private LocalDateTime gemeldetAt;

    @Enumerated(EnumType.STRING)
    @Column(length = 20, nullable = false)
    private MeldungStatus status;

    @Column(name = "bearbeitet_von")
    private UUID bearbeitetVon;

    @Column(name = "bearbeitet_at")
    private LocalDateTime bearbeitetAt;

    public static MeldungEntity create(UUID melderId, MeldungZielTyp zielTyp, UUID zielId, String grund) {
        MeldungEntity entity = new MeldungEntity();
        entity.setMeldungId(UUID.randomUUID());
        entity.setMelderId(melderId);
        entity.setZielTyp(zielTyp);
        entity.setZielId(zielId);
        entity.setGrund(grund);
        entity.setGemeldetAt(LocalDateTime.now());
        entity.setStatus(MeldungStatus.OFFEN);
        return entity;
    }
}
