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

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

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

import io.delphiplatform.api.util.CollectionUtils;
import io.delphiplatform.api.util.model.ModelUtils;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
@JsonInclude(JsonInclude.Include.NON_NULL)
public class TikTokTrackAnalyticsRangeMetrics {

    @JsonIgnore
    private LocalDate minDate;
    @JsonIgnore
    private LocalDate maxDate;
    @JsonIgnore
    private Map<LocalDate, Long> creationsByDate = new HashMap<>();
    @JsonIgnore
    private Map<LocalDate, Long> likesByDate = new HashMap<>();
    @JsonIgnore
    private Map<LocalDate, Long> sharesByDate = new HashMap<>();
    @JsonIgnore
    private Map<LocalDate, Long> favoritesByDate = new HashMap<>();
    @JsonIgnore
    private Map<LocalDate, Long> commentsByDate = new HashMap<>();
    @JsonIgnore
    private Map<LocalDate, Long> videoViewsByDate = new HashMap<>();

    public List<Long> getCreations() {
        return ModelUtils.toRange(creationsByDate, getMinDate(), getMaxDate());
    }

    public List<Long> getLikes() {
        return ModelUtils.toRange(likesByDate, getMinDate(), getMaxDate());
    }

    public List<Long> getShares() {
        return ModelUtils.toRange(sharesByDate, getMinDate(), getMaxDate());
    }

    public List<Long> getFavorites() {
        return ModelUtils.toRange(favoritesByDate, getMinDate(), getMaxDate());
    }

    public List<Long> getComments() {
        return ModelUtils.toRange(commentsByDate, getMinDate(), getMaxDate());
    }

    @JsonProperty("video_views")
    public List<Long> getVideoViews() {
        return ModelUtils.toRange(videoViewsByDate, getMinDate(), getMaxDate());
    }

    public void clearFields(Set<TikTokMetric> tikTokMetricsToClear) {
        if (CollectionUtils.isNotEmpty(tikTokMetricsToClear)) {
            if (tikTokMetricsToClear.contains(TikTokMetric.CREATIONS)) {
                setCreationsByDate(null);
            }
            if (tikTokMetricsToClear.contains(TikTokMetric.VIDEO_VIEWS)) {
                setVideoViewsByDate(null);
            }
            if (tikTokMetricsToClear.contains(TikTokMetric.LIKES)) {
                setLikesByDate(null);
            }
            if (tikTokMetricsToClear.contains(TikTokMetric.COMMENTS)) {
                setCommentsByDate(null);
            }
            if (tikTokMetricsToClear.contains(TikTokMetric.FAVORITES)) {
                setFavoritesByDate(null);
            }
            if (tikTokMetricsToClear.contains(TikTokMetric.SHARES)) {
                setSharesByDate(null);
            }
        }
    }
}

