/*
 * Decompiled with CFR 0.152.
 * 
 * Could not load the following classes:
 *  com.l7tech.common.http.GenericHttpRequestParams
 *  com.l7tech.policy.assertion.Assertion
 *  com.l7tech.policy.assertion.AssertionStatus
 *  io.opentelemetry.api.baggage.Baggage
 *  io.opentelemetry.api.trace.Span
 *  io.opentelemetry.api.trace.StatusCode
 *  io.opentelemetry.context.Context
 *  io.opentelemetry.context.Scope
 *  io.opentelemetry.context.propagation.TextMapPropagator
 *  io.opentelemetry.context.propagation.TextMapSetter
 */
package com.l7tech.server.otel.mediator;

import com.l7tech.common.http.GenericHttpRequestParams;
import com.l7tech.policy.assertion.Assertion;
import com.l7tech.policy.assertion.AssertionStatus;
import com.l7tech.server.TelemetryMediator;
import com.l7tech.server.message.PolicyEnforcementContext;
import com.l7tech.server.otel.OtelContextFactory;
import com.l7tech.server.otel.mediator.a;
import com.l7tech.server.policy.assertion.AssertionStatusException;
import io.opentelemetry.api.baggage.Baggage;
import io.opentelemetry.api.trace.Span;
import io.opentelemetry.api.trace.StatusCode;
import io.opentelemetry.context.Context;
import io.opentelemetry.context.Scope;
import io.opentelemetry.context.propagation.TextMapPropagator;
import io.opentelemetry.context.propagation.TextMapSetter;

public class OtelTelemetryMediator
implements TelemetryMediator {
    private static final TextMapSetter<GenericHttpRequestParams> a = new a();
    private Span b;
    private Scope c;

    @Override
    public void getStartAssertionEvent(Assertion assertion, PolicyEnforcementContext policyEnforcementContext) {
        this.b = policyEnforcementContext.getOtelContext().startAssertionSpan(assertion, policyEnforcementContext);
        this.c = policyEnforcementContext.getOtelContext().getCurrentSpan().makeCurrent();
    }

    @Override
    public void getStatusMsg(AssertionStatus assertionStatus) {
        block4: {
            try {
                try {
                    if (assertionStatus == null || assertionStatus.equals(AssertionStatus.NONE)) break block4;
                }
                catch (AssertionStatusException assertionStatusException) {
                    throw OtelTelemetryMediator.a(assertionStatusException);
                }
                this.b.recordException((Throwable)new AssertionStatusException(assertionStatus));
                this.b.setStatus(StatusCode.ERROR, assertionStatus.getMessage());
                return;
            }
            catch (AssertionStatusException assertionStatusException) {
                throw OtelTelemetryMediator.a(assertionStatusException);
            }
        }
        this.b.setStatus(StatusCode.OK, assertionStatus.getMessage());
    }

    @Override
    public void getStatusException(AssertionStatusException assertionStatusException) {
        this.b.recordException((Throwable)assertionStatusException);
        this.b.setStatus(StatusCode.ERROR, assertionStatusException.getAssertionStatus().getMessage());
    }

    @Override
    public void getThrowableInfo(Throwable throwable) {
        this.b.recordException(throwable);
        this.b.setStatus(StatusCode.ERROR, throwable.getClass().getSimpleName());
    }

    @Override
    public void getEndAssertionEvent(Assertion assertion, PolicyEnforcementContext policyEnforcementContext) {
        try {
            policyEnforcementContext.getOtelContext().endAssertionSpan(this.b, assertion, policyEnforcementContext);
            if (this.c != null) {
                this.c.close();
            }
        }
        catch (AssertionStatusException assertionStatusException) {
            throw OtelTelemetryMediator.a(assertionStatusException);
        }
    }

    @Override
    public void injectContextTextMapProgpagator(GenericHttpRequestParams genericHttpRequestParams, PolicyEnforcementContext policyEnforcementContext) {
        Baggage baggage = policyEnforcementContext.getOtelContext().createBaggage();
        try (Scope scope = baggage.storeInContext(Context.current()).makeCurrent();){
            TextMapPropagator textMapPropagator = OtelContextFactory.getTextMapPropagator();
            this.b = policyEnforcementContext.getOtelContext().getCurrentSpan();
            this.c = this.b.makeCurrent();
            textMapPropagator.inject(Context.current(), (Object)genericHttpRequestParams, a);
        }
    }

    private static AssertionStatusException a(AssertionStatusException assertionStatusException) {
        return assertionStatusException;
    }
}

