package trace

import (
	"contrib.go.opencensus.io/exporter/jaeger"
	octrace "go.opencensus.io/trace"
)

type jaegerProvider struct {
	exporter *jaeger.Exporter
}

func (provider *jaegerProvider) Register(opts *TracingOptions) error {
	jOpts := jaeger.Options{
		ServiceName:   opts.Service,
		AgentEndpoint: opts.JaegerAgentEndpoint,
	}
	if opts.JaegerCollectorEndpoint != nil {
		jOpts.CollectorEndpoint = opts.JaegerCollectorEndpoint.String()
	}
	jex, err := jaeger.NewExporter(jOpts)
	if err != nil {
		return err
	}
	octrace.RegisterExporter(jex)
	provider.exporter = jex
	return nil
}

func (provider *jaegerProvider) Unregister() error {
	if provider.exporter == nil {
		return nil
	}
	octrace.UnregisterExporter(provider.exporter)
	provider.exporter.Flush()
	provider.exporter = nil
	return nil
}