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

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;

import java.util.Arrays;

import io.delphiplatform.api.exception.InvalidParameterException;
import io.delphiplatform.api.v3.constant.RequestConstants;

/**
 * Enum containing TikTok state metric.
 */
public enum TikTokStateMetric {

    METRICS("metrics"),
    AGGREGATED_METRICS("aggregated_metrics"),
    LIFETIME_METRICS("lifetime_metrics"),
    SOURCE_META("source_meta");

    private final String value;

    TikTokStateMetric(String value) {
        this.value = value;
    }

    @JsonCreator
    public static TikTokStateMetric fromValue(String value) {
        return Arrays.stream(TikTokStateMetric.values()).filter(e -> e.getValue().equalsIgnoreCase(value)).findFirst()
            .orElseThrow(() -> new InvalidParameterException(RequestConstants.METRICS,
                Arrays.stream(TikTokStateMetric.values()).map(TikTokStateMetric::getValue), value));
    }

    @JsonValue
    public String getValue() {
        return value;
    }

    @Override
    public String toString() {
        return getValue();
    }
}

