package oldhttptransport

import (
	"net/http"

	"github.com/ooni/probe-cli/v3/internal/engine/legacy/netx/transactionid"
)

// Transactioner performs single HTTP transactions.
type Transactioner struct {
	roundTripper http.RoundTripper
}

// NewTransactioner creates a new Transport.
func NewTransactioner(roundTripper http.RoundTripper) *Transactioner {
	return &Transactioner{
		roundTripper: roundTripper,
	}
}

// RoundTrip executes a single HTTP transaction, returning
// a Response for the provided Request.
func (t *Transactioner) RoundTrip(req *http.Request) (*http.Response, error) {
	return t.roundTripper.RoundTrip(req.WithContext(
		transactionid.WithTransactionID(req.Context()),
	))
}

// CloseIdleConnections closes the idle connections.
func (t *Transactioner) CloseIdleConnections() {
	// Adapted from net/http code
	type closeIdler interface {
		CloseIdleConnections()
	}
	if tr, ok := t.roundTripper.(closeIdler); ok {
		tr.CloseIdleConnections()
	}
}