package hostruntime

import (
	"context"
	"strings"
)

type requestLineageContextKey struct{}

// RequestLineage carries request correlation facts across detached host-runtime
// work without exposing api-host to a backend-specific context key package.
type RequestLineage struct {
	RequestID   string
	Traceparent string
}

func ContextWithRequestLineage(ctx context.Context, lineage RequestLineage) context.Context {
	if ctx == nil {
		ctx = context.Background()
	}
	lineage.RequestID = strings.TrimSpace(lineage.RequestID)
	lineage.Traceparent = strings.TrimSpace(lineage.Traceparent)
	if lineage.RequestID == "" && lineage.Traceparent == "" {
		return ctx
	}
	return context.WithValue(ctx, requestLineageContextKey{}, lineage)
}

func RequestLineageFromContext(ctx context.Context) RequestLineage {
	if ctx == nil {
		return RequestLineage{}
	}
	lineage, _ := ctx.Value(requestLineageContextKey{}).(RequestLineage)
	lineage.RequestID = strings.TrimSpace(lineage.RequestID)
	lineage.Traceparent = strings.TrimSpace(lineage.Traceparent)
	return lineage
}
