package io.delphiplatform.api.v3.model.spotify;

import com.fasterxml.jackson.annotation.JsonProperty;

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

import io.delphiplatform.api.v3.model.DateDataRange;
import io.delphiplatform.api.v3.rdb.entity.spotify.SpotifyChartTrackEntity;
import lombok.EqualsAndHashCode;
import lombok.Getter;

@Getter
@EqualsAndHashCode
public class SpotifyChartTracksAnalyticsMetricGroup {

    private DateDataRange<Integer> positions;

    public SpotifyChartTracksAnalyticsMetricGroup(
        LocalDate min, LocalDate max,
        List<SpotifyChartTrackEntity> entities
    ) {
        positions = new DateDataRange<>(min, max);
        entities.forEach(e -> putPosition(e.getChartDate(), e.getCurrentPosition()));
    }

    @JsonProperty("positions")
    public List<Integer> getPositions() {
        return positions.toRange();
    }

    private void putPosition(LocalDate date, Integer position) {
        positions.getData().put(date, position);
    }

    public static SpotifyChartTracksAnalyticsMetricGroup of(
        LocalDate minDate, LocalDate maxDate,
        List<SpotifyChartTrackEntity> entities
    ) {
        return new SpotifyChartTracksAnalyticsMetricGroup(minDate, maxDate, entities);
    }
}
