package com.emonster.taroaichat.service.dto;

import com.emonster.taroaichat.domain.enumeration.Feedback;
import com.emonster.taroaichat.domain.enumeration.SessionStatus;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.persistence.Lob;
import jakarta.validation.constraints.*;
import java.io.Serializable;
import java.time.Instant;
import java.util.Objects;

/**
 * A DTO for the {@link com.emonster.taroaichat.domain.TarotSession} entity.
 */
@Schema(description = "Tarot reading sessions")
@SuppressWarnings("common-java:DuplicatedBlocks")
public class TarotSessionDTO implements Serializable {

    private Long id;

    @Lob
    private String cards;

    @Lob
    private String interpretation;

    @NotNull
    private SessionStatus status;

    private Feedback feedback;

    @Min(value = 1)
    @Max(value = 5)
    private Integer rating;

    @NotNull
    private Boolean saved;

    @Lob
    private String summary;

    @Size(max = 500)
    private String screenshotUrl;

    private Instant completedAt;

    private String createdBy;

    private Instant createdDate;

    private String lastModifiedBy;

    private Instant lastModifiedDate;

    @NotNull
    private UserProfileDTO userProfile;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getCards() {
        return cards;
    }

    public void setCards(String cards) {
        this.cards = cards;
    }

    public String getInterpretation() {
        return interpretation;
    }

    public void setInterpretation(String interpretation) {
        this.interpretation = interpretation;
    }

    public SessionStatus getStatus() {
        return status;
    }

    public void setStatus(SessionStatus status) {
        this.status = status;
    }

    public Feedback getFeedback() {
        return feedback;
    }

    public void setFeedback(Feedback feedback) {
        this.feedback = feedback;
    }

    public Integer getRating() {
        return rating;
    }

    public void setRating(Integer rating) {
        this.rating = rating;
    }

    public Boolean getSaved() {
        return saved;
    }

    public void setSaved(Boolean saved) {
        this.saved = saved;
    }

    public String getSummary() {
        return summary;
    }

    public void setSummary(String summary) {
        this.summary = summary;
    }

    public String getScreenshotUrl() {
        return screenshotUrl;
    }

    public void setScreenshotUrl(String screenshotUrl) {
        this.screenshotUrl = screenshotUrl;
    }

    public Instant getCompletedAt() {
        return completedAt;
    }

    public void setCompletedAt(Instant completedAt) {
        this.completedAt = completedAt;
    }

    public String getCreatedBy() {
        return createdBy;
    }

    public void setCreatedBy(String createdBy) {
        this.createdBy = createdBy;
    }

    public Instant getCreatedDate() {
        return createdDate;
    }

    public void setCreatedDate(Instant createdDate) {
        this.createdDate = createdDate;
    }

    public String getLastModifiedBy() {
        return lastModifiedBy;
    }

    public void setLastModifiedBy(String lastModifiedBy) {
        this.lastModifiedBy = lastModifiedBy;
    }

    public Instant getLastModifiedDate() {
        return lastModifiedDate;
    }

    public void setLastModifiedDate(Instant lastModifiedDate) {
        this.lastModifiedDate = lastModifiedDate;
    }

    public UserProfileDTO getUserProfile() {
        return userProfile;
    }

    public void setUserProfile(UserProfileDTO userProfile) {
        this.userProfile = userProfile;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (!(o instanceof TarotSessionDTO)) {
            return false;
        }

        TarotSessionDTO tarotSessionDTO = (TarotSessionDTO) o;
        if (this.id == null) {
            return false;
        }
        return Objects.equals(this.id, tarotSessionDTO.id);
    }

    @Override
    public int hashCode() {
        return Objects.hash(this.id);
    }

    // prettier-ignore
    @Override
    public String toString() {
        return "TarotSessionDTO{" +
            "id=" + getId() +
            ", cards='" + getCards() + "'" +
            ", interpretation='" + getInterpretation() + "'" +
            ", status='" + getStatus() + "'" +
            ", feedback='" + getFeedback() + "'" +
            ", rating=" + getRating() +
            ", saved='" + getSaved() + "'" +
            ", summary='" + getSummary() + "'" +
            ", screenshotUrl='" + getScreenshotUrl() + "'" +
            ", completedAt='" + getCompletedAt() + "'" +
            ", createdBy='" + getCreatedBy() + "'" +
            ", createdDate='" + getCreatedDate() + "'" +
            ", lastModifiedBy='" + getLastModifiedBy() + "'" +
            ", lastModifiedDate='" + getLastModifiedDate() + "'" +
            ", userProfile=" + getUserProfile() +
            "}";
    }
}
