package com.emonster.taroaichat.service.dto;

import com.emonster.taroaichat.domain.enumeration.ArcanaType;
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.TarotCard} entity.
 */
@Schema(description = "Tarot card definitions")
@SuppressWarnings("common-java:DuplicatedBlocks")
public class TarotCardDTO implements Serializable {

    private Long id;

    @NotNull
    @Size(max = 100)
    private String name;

    @NotNull
    private ArcanaType arcanaType;

    @NotNull
    @Min(value = 0)
    @Max(value = 78)
    private Integer cardNumber;

    @NotNull
    @Size(max = 500)
    private String imageUrl;

    @Lob
    private String uprightMeaning;

    @Lob
    private String reversedMeaning;

    @Size(max = 500)
    private String keywords;

    private String createdBy;

    private Instant createdDate;

    private String lastModifiedBy;

    private Instant lastModifiedDate;

    public Long getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public ArcanaType getArcanaType() {
        return arcanaType;
    }

    public void setArcanaType(ArcanaType arcanaType) {
        this.arcanaType = arcanaType;
    }

    public Integer getCardNumber() {
        return cardNumber;
    }

    public void setCardNumber(Integer cardNumber) {
        this.cardNumber = cardNumber;
    }

    public String getImageUrl() {
        return imageUrl;
    }

    public void setImageUrl(String imageUrl) {
        this.imageUrl = imageUrl;
    }

    public String getUprightMeaning() {
        return uprightMeaning;
    }

    public void setUprightMeaning(String uprightMeaning) {
        this.uprightMeaning = uprightMeaning;
    }

    public String getReversedMeaning() {
        return reversedMeaning;
    }

    public void setReversedMeaning(String reversedMeaning) {
        this.reversedMeaning = reversedMeaning;
    }

    public String getKeywords() {
        return keywords;
    }

    public void setKeywords(String keywords) {
        this.keywords = keywords;
    }

    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;
    }

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

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

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

    // prettier-ignore
    @Override
    public String toString() {
        return "TarotCardDTO{" +
            "id=" + getId() +
            ", name='" + getName() + "'" +
            ", arcanaType='" + getArcanaType() + "'" +
            ", cardNumber=" + getCardNumber() +
            ", imageUrl='" + getImageUrl() + "'" +
            ", uprightMeaning='" + getUprightMeaning() + "'" +
            ", reversedMeaning='" + getReversedMeaning() + "'" +
            ", keywords='" + getKeywords() + "'" +
            ", createdBy='" + getCreatedBy() + "'" +
            ", createdDate='" + getCreatedDate() + "'" +
            ", lastModifiedBy='" + getLastModifiedBy() + "'" +
            ", lastModifiedDate='" + getLastModifiedDate() + "'" +
            "}";
    }
}
