package loggabletracer

import "github.com/opentracing/opentracing-go"

// A SpanEvent is emitted when a mutating command is called on a Span.
type SpanEvent interface{}

// EventCreate is emitted when a Span is created.
type EventCreate struct{ OperationName string }

// EventTag is received when SetTag is called.
type EventTag struct {
	Key   string
	Value interface{}
}

// EventBaggage is received when SetBaggageItem is called.
type EventBaggage struct {
	Key, Value string
}

// EventLogFields is received when LogFields or LogKV is called.
type EventLogFields opentracing.LogRecord

// EventLog is received when Log (or one of its derivatives) is called.
//
// DEPRECATED
type EventLog opentracing.LogData

// EventFinish is received when Finish is called.
type EventFinish RawSpan

func (s *spanImpl) onCreate(opName string) {
	if s.event != nil {
		s.event(EventCreate{OperationName: opName})
	}
}
func (s *spanImpl) onTag(key string, value interface{}) {
	if s.event != nil {
		s.event(EventTag{Key: key, Value: value})
	}
}
func (s *spanImpl) onLog(ld opentracing.LogData) {
	if s.event != nil {
		s.event(EventLog(ld))
	}
}
func (s *spanImpl) onLogFields(lr opentracing.LogRecord) {
	if s.event != nil {
		s.event(EventLogFields(lr))
	}
}
func (s *spanImpl) onBaggage(key, value string) {
	if s.event != nil {
		s.event(EventBaggage{Key: key, Value: value})
	}
}
func (s *spanImpl) onFinish(sp RawSpan) {
	if s.event != nil {
		s.event(EventFinish(sp))
	}
}
