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

import org.hibernate.annotations.Type;

import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
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_apple_music_track", schema = ChartmetricPartner.APPLE)
@Getter
@Setter
public class AppleMusicTrackEntity {

    @Id
    @Column(name = "apple_music_track_id")
    private String appleMusicTrackId;

    @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 = "artwork_url")
    private String artworkUrl;

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

    @OneToMany(mappedBy = "track")
    private List<AppleMusicTrackLocalizedEntity> localizedTracks;

    @ManyToMany
    @OrderColumn(name = "rank")
    @JoinTable(
        name = "link_apple_music_track_artist",
        schema = ChartmetricPartner.APPLE,
        joinColumns = {
            @JoinColumn(name = "apple_music_track_id")
        },
        inverseJoinColumns = {@JoinColumn(name = "apple_music_artist_id")}
    )
    private List<AppleMusicArtistEntity> artists;
}
