// Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build disable_events
// +build disable_events

package event

import (
	"context"
	"time"
)

type Builder struct{ ctx context.Context }
type Exporter struct {
	Now func() time.Time
}

func NewExporter(h interface{}) *Exporter { return &Exporter{} }

func To(ctx context.Context) Builder                        { return Builder{} }
func (b Builder) Clone() Builder                            { return b }
func (b Builder) Label(label Label) Builder                 { return b }
func (b Builder) Labels(labels ...Label) Builder            { return b }
func (b Builder) Log(message string)                        {}
func (b Builder) Logf(template string, args ...interface{}) {}
func (b Builder) Metric()                                   {}
func (b Builder) Annotate()                                 {}
func (b Builder) End()                                      {}
func (b Builder) Event() *Event                             { return &Event{} }
func (b Builder) Start(name string) (context.Context, func()) {
	return b.ctx, func() {}
}

func newContext(ctx context.Context, exporter *Exporter, parent uint64) context.Context {
	return ctx
}
func FromContext(ctx context.Context) *Target { return nil }

func setDefaultExporter(e *Exporter) {}
