package io.delphiplatform.api.integration.model;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonFormat.Shape;
import com.fasterxml.jackson.annotation.JsonProperty;

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

import io.delphiplatform.api.v3.constant.ApplicationConstants;
import io.delphiplatform.api.v3.model.PlaylistDates;
import io.delphiplatform.api.v3.model.PlaylistStreamingForPeriodsInfo;
import io.delphiplatform.api.v3.model.PublicPlaylist;
import io.delphiplatform.api.v3.model.TrackSimple;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Getter
@Setter
@NoArgsConstructor
@EqualsAndHashCode
public class PublicPlaylistTrackPreviousPositionModel {

    @JsonProperty("dsp")
    private String dsp;

    @JsonProperty("earliest_position_date_time")
    @JsonFormat(shape = Shape.STRING, pattern = ApplicationConstants.ISO_DATE_TIME_PATTERN)
    private LocalDateTime earliestPositionDateTime;

    @JsonProperty("removed_date_time")
    @JsonFormat(shape = Shape.STRING, pattern = ApplicationConstants.ISO_DATE_TIME_PATTERN)
    private LocalDateTime removedDateTime;

    @JsonProperty("isrc")
    private String isrc;

    @JsonProperty("num_days_on")
    private Long numDaysOn;

    @JsonProperty("playlist_id")
    private String playlistId;

    @JsonProperty("playlist")
    private PublicPlaylist playlist;

    @JsonProperty("track")
    private TrackSimple track;

    @JsonProperty("playlist_dates")
    private PlaylistDates playlistDates;

    @JsonProperty("streaming_info")
    private Map<String, PlaylistStreamingForPeriodsInfo> streamingInfo;

}
