package io.delphiplatform.api.v3.rdb.entity;

import org.hibernate.annotations.Where;

import java.math.BigInteger;
import java.time.LocalDate;
import java.util.Set;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;

import lombok.Getter;
import lombok.Setter;

@Entity(name = "product")
@Getter
@Setter
public class ProductEntity extends TrackedEntity {

    @Id
    private String productId;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "label_id")
    private LabelEntity label;
    private String prodNo;
    private String digitalBarcode;
    private String origProdNo;
    private LocalDate releaseDate;
    private String digitalTitleSuppl;
    private String subTitle;
    private String copyrightLine;
    private String isan;
    private String name;
    private BigInteger spotifyPopularity;
    private String spotifyAlbumId;
    @ManyToMany(mappedBy = "products", fetch = FetchType.LAZY)
    private Set<ArtistEntity> artists;
    @OneToMany(mappedBy = "product", fetch = FetchType.LAZY)
    @Where(clause = MediaTypeEntity.AUDIO_MEDIA_TYPES_WHERE_CLAUSE)
    private Set<TrackEntity> tracks;
    private LocalDate raasInitDate;
    private Boolean isComplete;
    private String gridNo;
    private String audioFormat;
    private String imageFormat;
    private String cLine;
    private Boolean isDmdConfigFlag;
    private Boolean isExplicit;
    private String mediaTypeName;
    private Integer noOfSides;
    private Integer publishKey;
    private String publishStatus;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "prod_vers_no")
    private ProductVersionEntity productVersion;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "raas_init_key")
    private CompanyEntity raasInitCompany;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "config_key")
    private ConfigurationEntity configuration;


}
