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

import org.hibernate.annotations.Type;

import java.util.List;

import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.OrderColumn;
import javax.persistence.Table;

import io.delphiplatform.api.v3.constant.ChartmetricPartner;
import lombok.Getter;
import lombok.Setter;

@Entity
@Table(name = "dim_spotify_track", schema = ChartmetricPartner.SPOTIFY)
@Getter
@Setter
public class SpotifyTrackEntity {

    @EmbeddedId
    private SpotifyTrackId id;

    @Column(name = "isrc")
    private String isrc;

    @Column(name = "is_sony")
    private boolean isSony;

    @Column(name = "licensors", columnDefinition = "text[]")
    @Type(type = "io.delphiplatform.api.v3.rdb.entity.converter.CustomStringArrayType")
    private String[] licensors;

    @Column(name = "uri")
    private String uri;

    @Column(name = "release_date")
    private String releaseDate;

    @Column(name = "image_url")
    private String imageUrl;

    @Column(name = "name")
    private String name;

    @ManyToMany
    @OrderColumn(name="rank")
    @JoinTable(
        name = "link_spotify_track_artist",
        schema = ChartmetricPartner.SPOTIFY,
        joinColumns = {
            @JoinColumn(name = "spotify_country_id"),
            @JoinColumn(name = "spotify_track_id")
        },
        inverseJoinColumns = {@JoinColumn(name = "spotify_artist_id")}
    )
    private List<SpotifyArtistEntity> artists;

}
