package io.delphiplatform.api.v3.rdb.service;

import java.time.LocalDate;
import java.util.stream.Collector;

import io.delphiplatform.api.v3.model.datahealth.DataHealthRangeBreakdown;
import io.delphiplatform.api.v3.rdb.entity.AdsStatusDailyEntity;
import lombok.Getter;

@Getter
public class AdsDspAnalyticCollector {

    private DataHealthRangeBreakdown data;

    public AdsDspAnalyticCollector(LocalDate minDate, LocalDate maxDate) {
        this.data = new DataHealthRangeBreakdown(minDate, maxDate);
    }

    public void accumulate(AdsStatusDailyEntity model) {
        data.putDays(model.getDate(), model.getStatus());
    }

    public AdsDspAnalyticCollector merge(AdsDspAnalyticCollector another) {
        return this;
    }


    public DataHealthRangeBreakdown finish() {
        return data;
    }

    public static Collector<AdsStatusDailyEntity, AdsDspAnalyticCollector, DataHealthRangeBreakdown> get(LocalDate minDate, LocalDate maxDate) {
        return Collector.of(
            () -> new AdsDspAnalyticCollector(minDate, maxDate),
            AdsDspAnalyticCollector::accumulate,
            AdsDspAnalyticCollector::merge,
            AdsDspAnalyticCollector::finish);
    }
}
