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

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;

public enum SpotifyChartsDataHealthStatus {

    MISSING(DataHealthStatus.MISSING),

    PENDING(DataHealthStatus.PENDING),

    PARTIAL(DataHealthStatus.PARTIAL),

    COMPLETE(DataHealthStatus.COMPLETE),

    COMPLETE_VOLATILE(DataHealthStatus.COMPLETE_VOLATILE);

    private final DataHealthStatus status;

    SpotifyChartsDataHealthStatus(DataHealthStatus value) {
        this.status = value;
    }

    @JsonCreator
    public static SpotifyChartsDataHealthStatus fromValue(String value) {
        for (SpotifyChartsDataHealthStatus b : SpotifyChartsDataHealthStatus.values()) {
            if (b.status.getValue().equalsIgnoreCase(value)) {
                return b;
            }
        }
        throw new InvalidParameterException(RequestConstants.STATUS,
            Arrays.stream(SpotifyChartsDataHealthStatus.values()).map(SpotifyChartsDataHealthStatus::getValue), value);
    }

    @JsonValue
    public String getValue() {
        return status.getValue();
    }

    public DataHealthStatus getStatus() {
        return status;
    }

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