-module(passage_span_context).

-export([make/2]).
-export([get_baggage_items/1]).
-export([set_baggage_items/2]).

-export_type([context/0, maybe_context/0]).

-define(CONTEXT, ?MODULE).

-record(?CONTEXT,
        {
          state :: term(),
          baggage_items = #{} :: passage:baggage_items()
        }).

-opaque context() :: #?CONTEXT{}.

-type maybe_context() :: context() | undefined.

-type format() :: text_map | http_header | binary.

-type carrier() :: term().

-type key() :: binary().
-type value() :: binary().
-type inject_fun() :: fun ((key(), value(), carrier()) -> carrier()).
-type extract_fun() :: fun ((carrier()) -> {ok, key(), value(), carrier()} | error).

-callback make_span_context(passage_span:span(), passage:baggage_items()) ->
    passage_span_context:context().

-callback inject_span_context(passage_span_context:context(), format(),
                              carrier(), inject_fun()) -> carrier().

-callback extract_span_context(format(), carrier(), extract_fun()) ->
    {ok, passage_span_context:context()} | error.

-spec make(passage_span:span(), passage:baggage_items()) -> context().
make(Span, BaggageItems) ->
    State = passage_tracer:make_span_context_state(Span, BaggageItems),
    #?CONTEXT{ state = State, baggage_items = BaggageItems }.

-spec get_baggage_items(maybe_context()) -> passage:baggage_items().
get_baggage_items(undefined) -> #{};
get_baggage_items(Context)   -> Context#?CONTEXT.baggage_items.

-spec set_baggage_items(maybe_context(), passage:baggage_items()) -> maybe_context().
set_baggage_items(undefined, _BaggageItems) -> undefined;
set_baggage_items(Context,    BaggageItems) ->
    Merged = maps:merge(Context#?CONTEXT.baggage_items, BaggageItems),
    Context#?CONTEXT{baggage_items = Merged}.
