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

import java.time.LocalDate;

import com.fasterxml.jackson.annotation.JsonProperty;

import io.delphiplatform.api.v3.model.DateDataRange;

import java.util.List;

public class ChartTracksAnalyticsMetricGroup {

    private final DateDataRange<Integer> positions;

    public ChartTracksAnalyticsMetricGroup(
        LocalDate min, LocalDate max,
        List<? extends DatePosition> entities
    ) {
        positions = new DateDataRange<>(min, max);

        entities.forEach(entity -> putPosition(entity.getChartDate(), entity.getCurrentPosition()));
    }

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

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

    public static ChartTracksAnalyticsMetricGroup of(
        LocalDate minDate, LocalDate maxDate,
        List<? extends DatePosition> entities
    ) {
        return new ChartTracksAnalyticsMetricGroup(minDate, maxDate, entities);
    }
}

