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

import java.time.LocalDate;
import java.util.List;
import java.util.Set;

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

import lombok.Getter;
import lombok.Setter;

@Entity(name = "project")
@Getter
@Setter
public class ProjectEntity extends TrackedEntity {

    @Id
    private String projectId;
    private Integer recProjectId;
    private String recProjectNumber;
    private String recProjectTitle;
    private LocalDate raasInitDate;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "rec_project_type")
    private ProjectTypeEntity recProjectType;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "rep_owner_key", nullable = false)
    private RepertoireOwnerEntity repertoireOwner;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "copy_owner_country_key")
    private CountryEntity copyOwnerCountry;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "genre_key")
    private GenreEntity genre;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "label_id", nullable = false)
    private LabelEntity label;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "language_key")
    private LanguageEntity language;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "raas_init_key", nullable = false)
    private CompanyEntity raasInitCompany;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "record_country_key")
    private CountryEntity recordCountry;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "song_title_language_key")
    private LanguageEntity songTitleLanguage;

    @ManyToMany
    @JoinTable(
        name = "project_artist",
        joinColumns = {@JoinColumn(name = "project_id")},
        inverseJoinColumns = {@JoinColumn(name = "artist_id")}
    )
    private List<ArtistEntity> artists;

    @ManyToMany(mappedBy = "projects", fetch = FetchType.LAZY)
    private Set<ProductVersionEntity> productVersions;


}
