// 
// Decompiled by Procyon v0.6.0
// 

package io.sentry;

import java.io.IOException;
import java.util.Objects;
import org.jetbrains.annotations.NotNull;
import io.sentry.util.LazyEvaluator;

public final class SpanId implements JsonSerializable
{
    public static final SpanId EMPTY_ID;
    @NotNull
    private final LazyEvaluator<String> lazyValue;
    
    public SpanId(@NotNull final String value) {
        Objects.requireNonNull(value, "value is required");
        this.lazyValue = new LazyEvaluator<String>(() -> value);
    }
    
    public SpanId() {
        this.lazyValue = new LazyEvaluator<String>(SentryUUID::generateSpanId);
    }
    
    @Override
    public boolean equals(final Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || this.getClass() != o.getClass()) {
            return false;
        }
        final SpanId spanId = (SpanId)o;
        return this.lazyValue.getValue().equals(spanId.lazyValue.getValue());
    }
    
    @Override
    public int hashCode() {
        return this.lazyValue.getValue().hashCode();
    }
    
    @Override
    public String toString() {
        return this.lazyValue.getValue();
    }
    
    @Override
    public void serialize(@NotNull final ObjectWriter writer, @NotNull final ILogger logger) throws IOException {
        writer.value(this.lazyValue.getValue());
    }
    
    static {
        EMPTY_ID = new SpanId("00000000-0000-0000-0000-000000000000".replace("-", "").substring(0, 16));
    }
    
    public static final class Deserializer implements JsonDeserializer<SpanId>
    {
        @NotNull
        @Override
        public SpanId deserialize(@NotNull final ObjectReader reader, @NotNull final ILogger logger) throws Exception {
            return new SpanId(reader.nextString());
        }
    }
}
