package io.delphiplatform.api.v3.model;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;

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

import io.delphiplatform.api.util.model.ModelUtils;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class PublicPlaylistFollowers {

    @JsonProperty("playlist_id")
    private String playlistId;

    @JsonIgnore
    private Map<LocalDate, Long> followersByDate;

    @JsonProperty("start_date")
    public LocalDate getStartDate() {
        if (followersByDate.isEmpty()) {
            return null;
        }

        return followersByDate.keySet().stream().min(LocalDate::compareTo).get();
    }

    @JsonProperty("end_date")
    public LocalDate getEndDate() {
        if (followersByDate.isEmpty()) {
            return null;
        }

        return followersByDate.keySet().stream().max(LocalDate::compareTo).get();
    }

    @JsonProperty("followers")
    public List<Long> getFollowers() {
        if (followersByDate.isEmpty()) {
            return null;
        }

        return ModelUtils.toRange(followersByDate, getStartDate(), getEndDate());
    }
}
