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

import java.time.LocalDate;
import java.util.IntSummaryStatistics;
import java.util.Set;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.annotation.JsonProperty;

import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.Getter;

@Getter
@EqualsAndHashCode
@Builder
public class ChartTracksAnalytics {

    @JsonProperty("track_id")
    private String trackId;

    @JsonProperty("isrcs")
    private Set<String> isrcs;

    @JsonProperty("min_date")
    private LocalDate minDate;

    @JsonProperty("max_date")
    private LocalDate maxDate;

    @JsonProperty("min_position")
    private Integer minPosition;

    @JsonProperty("max_position")
    private Integer maxPosition;

    @JsonInclude(Include.NON_NULL)
    @JsonProperty("metrics")
    private ChartTracksAnalyticsMetricGroup metrics;

    public static ChartTracksAnalytics of(String trackId, LocalDate minDate, LocalDate maxDate,
        IntSummaryStatistics positions, ChartTracksAnalyticsMetricGroup metrics, Set<String> isrcs) {
        return ChartTracksAnalytics
            .builder()
            .trackId(trackId)
            .isrcs(isrcs)
            .minDate(minDate)
            .maxDate(maxDate)
            .minPosition(positions.getMin())
            .maxPosition(positions.getMax())
            .metrics(metrics)
            .build();
    }
}

