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

import org.hibernate.annotations.Type;

import java.time.LocalDate;

import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.Table;

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

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

    @EmbeddedId
    private SpotifyJunoTopStreamsDailyId id;

    @Column(name = "isrc", insertable = false, updatable = false)
    private String isrc;

    @Column(name = "country_code", insertable = false, updatable = false)
    private String countryCode;

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

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

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

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

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

    @Column(name = "streams_1_7_days_total")
    private Long streams17DaysTotal;

    @Column(name = "streams_8_14_days_total")
    private Long streams814DaysTotal;

    @Column(name = "streams_1_7_days_lean_back")
    private Long streams17DaysLeanBack;

    @Column(name = "streams_8_14_days_lean_back")
    private Long streams814DaysLeanBack;

    @Column(name = "streams_1_7_days_lean_forward")
    private Long streams17DaysLeanForward;

    @Column(name = "streams_8_14_days_lean_forward")
    private Long streams814DaysLeanForward;

    @Column(name = "streams_1_7_days_male")
    private Long streams17DaysMale;

    @Column(name = "streams_8_14_days_male")
    private Long streams814DaysMale;

    @Column(name = "streams_1_7_days_female")
    private Long streams17DaysFemale;

    @Column(name = "streams_8_14_days_female")
    private Long streams814DaysFemale;

    @Column(name = "streams_change_7_to_14_days")
    private Long streamsChange7To14Days;

    @Column(name = "streams_change_7_to_14_days_lean_back")
    private Long streamsChange7To14DaysLeanBack;

    @Column(name = "streams_change_7_to_14_days_lean_forward")
    private Long streamsChange7To14DaysLeanForward;

    @Column(name = "streams_change_percent_7_to_14_days")
    private Double streamsChangePercent7To14Days;

    @Column(name = "streams_change_percent_7_to_14_days_lean_back")
    private Long streamsChangePercent7To14DaysLeanBack;

    @Column(name = "streams_change_percent_7_to_14_days_lean_forward")
    private Long streamsChangePercent7To14DaysLeanForward;

    @Column(name = "latest_entry_date")
    private LocalDate latestEntryDate;

    @Column(name = "product_sale_date")
    private LocalDate productSaleDate;
}
