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

import org.hibernate.annotations.ColumnDefault;

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 lombok.Getter;
import lombok.Setter;

@Entity(name = "track")
@Getter
@Setter
public class TrackEntity extends TrackedEntity {

    @Id
    private String trackId;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "product_id", nullable = false)
    private ProductEntity product;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "track_family_id")
    private TrackFamilyEntity trackFamily;
    private String trackNo;
    private String gridNo;
    private String trackExt;
    private LocalDate releaseDate;
    private String isrc;
    private String name;
    private String trackNameSuppl;
    private Integer spotifyPopularity;
    private String spotifyTrackId;
    private LocalDate firstRecordingDate;
    private String lyricsVersion;
    private BigInteger sequenceNumber;
    private BigInteger sideNo;
    @ColumnDefault("false")
    private Boolean isMainProduct;
    @ManyToMany(mappedBy = "tracks", fetch = FetchType.LAZY)
    private Set<ArtistEntity> artists;
    private LocalDate raasInitDate;
    private String trackTypeName;
    private String liveRecFlag;
    private Integer playTimeSeconds;
    private LocalDate recordDate;
    private String recordPlace;
    private String raasTrackNo;
    private String recordPeriod;
    private String trackSubtypeName;
    private LocalDate origReleaseDate;
    private String relatedAudioIsrc;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "rep_owner_key")
    private RepertoireOwnerEntity repertoireOwner;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "config_cat_key")
    private ConfigurationCategoryEntity configurationCategory;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "raas_init_key")
    private CompanyEntity raasInitCompany;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "genre_key")
    private GenreEntity genre;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "record_country")
    private CountryEntity recordCountry;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "language_key")
    private LanguageEntity language;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "track_media_key")
    private MediaTypeEntity trackMediaType;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "created_in_project_id")
    private ProjectEntity createdInProject;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "copy_owner_country_key")
    private CountryEntity copyOwnerCountry;


}
