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

import com.sonymusic.delphi.etl.apps.proto.DapdPlaylists.DapdPlaylistTrackCountryStats;
import com.sonymusic.delphi.etl.apps.proto.DapdPlaylists.DapdPlaylistTrackPositionsCountryStats;
import com.sonymusic.delphi.etl.apps.proto.DapdPlaylists.DapdPlaylistTrackPositionsStats;
import com.sonymusic.delphi.etl.apps.proto.DapdPlaylists.DapdPlaylistTrackStats;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Map;

public class PlaylistPublicPosition {

    private LocalDate date;
    private String dsp;
    private String playlistId;
    private String isrc;
    private Long current;
    private Long previous;
    private Long earliestPosition;
    private Long trend;
    private String dspTrackId;
    private String countryCode;
    private Long daysInPlaylist;
    private LocalDateTime previousPositionDateTime;
    private LocalDate earliestPositionDate;
    private LocalDate latestPositionDate;
    private Long previousPositionChange14Days;
    private Long trendChange14Days;
    private LocalDate lastDateChange14Days;
    private Boolean topTrackForIsrc;

    private DapdPlaylistTrackCountryStats dapdPlaylistTrackCountryStats;
    private DapdPlaylistTrackPositionsCountryStats dapdPlaylistTrackPositionsCountryStats;

    public PlaylistPublicPosition() {
    }

    //Copy constructor, update on fields extension
    public PlaylistPublicPosition(PlaylistPublicPosition other) {
        this.date = other.date;
        this.dsp = other.dsp;
        this.playlistId = other.playlistId;
        this.isrc = other.isrc;
        this.current = other.current;
        this.previous = other.previous;
        this.earliestPosition = other.earliestPosition;
        this.trend = other.trend;
        this.dspTrackId = other.dspTrackId;
        this.countryCode = other.countryCode;
        this.daysInPlaylist = other.daysInPlaylist;
        this.previousPositionDateTime = other.previousPositionDateTime;
        this.earliestPositionDate = other.earliestPositionDate;
        this.latestPositionDate = other.latestPositionDate;
        this.previousPositionChange14Days = other.previousPositionChange14Days;
        this.trendChange14Days = other.trendChange14Days;
        this.lastDateChange14Days = other.lastDateChange14Days;
        this.topTrackForIsrc = other.topTrackForIsrc;
        //share same maps as they are not intended to be modified
        this.dapdPlaylistTrackCountryStats = other.dapdPlaylistTrackCountryStats;
        this.dapdPlaylistTrackPositionsCountryStats = other.dapdPlaylistTrackPositionsCountryStats;
    }

    public Map<String, DapdPlaylistTrackStats> getPlaylistTrackCountryStatsMap() {
        if (dapdPlaylistTrackCountryStats == null) {
            return null;
        }

        return dapdPlaylistTrackCountryStats.getCountriesMap();
    }

    public DapdPlaylistTrackCountryStats getDapdPlaylistTrackCountryStats() {
        return this.dapdPlaylistTrackCountryStats;
    }

    public void setDapdPlaylistTrackCountryStats(DapdPlaylistTrackCountryStats dapdPlaylistTrackCountryStats) {
        this.dapdPlaylistTrackCountryStats = dapdPlaylistTrackCountryStats;
    }

    public Map<String, DapdPlaylistTrackPositionsStats> getPlaylistIsrcTracksStatsMap() {
        if (dapdPlaylistTrackPositionsCountryStats == null) {
            return null;
        }

        return dapdPlaylistTrackPositionsCountryStats.getCountriesMap();
    }

    public DapdPlaylistTrackPositionsCountryStats getDapdPlaylistTrackPositionsCountryStats() {
        return this.dapdPlaylistTrackPositionsCountryStats;
    }

    public void setDapdPlaylistTrackPositionsCountryStats(DapdPlaylistTrackPositionsCountryStats dapdPlaylistTrackPositionsCountryStats) {
        this.dapdPlaylistTrackPositionsCountryStats = dapdPlaylistTrackPositionsCountryStats;
    }

    public LocalDate getDate() {
        return this.date;
    }

    public void setDate(LocalDate date) {
        this.date = date;
    }

    public String getDsp() {
        return this.dsp;
    }

    public void setDsp(String dsp) {
        this.dsp = dsp;
    }

    public String getPlaylistId() {
        return this.playlistId;
    }

    public void setPlaylistId(String playlistId) {
        this.playlistId = playlistId;
    }

    public String getIsrc() {
        return this.isrc;
    }

    public void setIsrc(String isrc) {
        this.isrc = isrc;
    }

    public Long getCurrent() {
        return this.current;
    }

    public void setCurrent(Long current) {
        this.current = current;
    }

    public Long getPrevious() {
        return this.previous;
    }

    public void setPrevious(Long previous) {
        this.previous = previous;
    }

    public Long getEarliestPosition() {
        return this.earliestPosition;
    }

    public void setEarliestPosition(Long earliestPosition) {
        this.earliestPosition = earliestPosition;
    }

    public Long getTrend() {
        return this.trend;
    }

    public void setTrend(Long trend) {
        this.trend = trend;
    }

    public String getDspTrackId() {
        return this.dspTrackId;
    }

    public void setDspTrackId(String dspTrackId) {
        this.dspTrackId = dspTrackId;
    }

    public String getCountryCode() {
        return this.countryCode;
    }

    public void setCountryCode(String countryCode) {
        this.countryCode = countryCode;
    }

    public Long getDaysInPlaylist() {
        return this.daysInPlaylist;
    }

    public void setDaysInPlaylist(Long daysInPlaylist) {
        this.daysInPlaylist = daysInPlaylist;
    }

    public LocalDateTime getPreviousPositionDateTime() {
        return previousPositionDateTime;
    }

    public void setPreviousPositionDateTime(LocalDateTime previousPositionDateTime) {
        this.previousPositionDateTime = previousPositionDateTime;
    }

    public LocalDate getEarliestPositionDate() {
        return this.earliestPositionDate;
    }

    public void setEarliestPositionDate(LocalDate earliestPositionDate) {
        this.earliestPositionDate = earliestPositionDate;
    }

    public LocalDate getLatestPositionDate() {
        return this.latestPositionDate;
    }

    public void setLatestPositionDate(LocalDate latestPositionDate) {
        this.latestPositionDate = latestPositionDate;
    }

    public Long getPreviousPositionChange14Days() {
        return this.previousPositionChange14Days;
    }

    public void setPreviousPositionChange14Days(Long previousPositionChange14Days) {
        this.previousPositionChange14Days = previousPositionChange14Days;
    }

    public Long getTrendChange14Days() {
        return this.trendChange14Days;
    }

    public void setTrendChange14Days(Long trendChange14Days) {
        this.trendChange14Days = trendChange14Days;
    }

    public LocalDate getLastDateChange14Days() {
        return this.lastDateChange14Days;
    }

    public void setLastDateChange14Days(LocalDate lastDateChange14Days) {
        this.lastDateChange14Days = lastDateChange14Days;
    }

    public Boolean isTopTrackForIsrc() {
        return topTrackForIsrc;
    }

    public void setTopTrackForIsrc(Boolean topTrackForIsrc) {
        this.topTrackForIsrc = topTrackForIsrc;
    }
}
