package tunnelrpc

import (
	"context"

	log "github.com/sirupsen/logrus"
	"golang.org/x/net/trace"
	"zombiezen.com/go/capnproto2/rpc"
)

// ConnLogger wraps a logrus *log.Entry for a connection.
type ConnLogger struct {
	Entry *log.Entry
}

func (c ConnLogger) Infof(ctx context.Context, format string, args ...interface{}) {
	c.Entry.Infof(format, args...)
}

func (c ConnLogger) Errorf(ctx context.Context, format string, args ...interface{}) {
	c.Entry.Errorf(format, args...)
}

func ConnLog(log *log.Entry) rpc.ConnOption {
	return rpc.ConnLog(ConnLogger{log})
}

// ConnTracer wraps a trace.EventLog for a connection.
type ConnTracer struct {
	Events trace.EventLog
}

func (c ConnTracer) Infof(ctx context.Context, format string, args ...interface{}) {
	c.Events.Printf(format, args...)
}

func (c ConnTracer) Errorf(ctx context.Context, format string, args ...interface{}) {
	c.Events.Errorf(format, args...)
}

func ConnTrace(events trace.EventLog) rpc.ConnOption {
	return rpc.ConnLog(ConnTracer{events})
}
