package backend

import "net/http"

// httpUserAgentRoundTripper is a custom http.RoundTripper that modifies the User-Agent header
// of outgoing HTTP requests.
type httpUserAgentRoundTripper struct {
	userAgent string
	rt        http.RoundTripper
}

func newCustomUserAgentRoundTripper(rt http.RoundTripper, userAgent string) *httpUserAgentRoundTripper {
	return &httpUserAgentRoundTripper{
		rt:        rt,
		userAgent: userAgent,
	}
}

// RoundTrip modifies the User-Agent header of the request and then delegates the request
// to the underlying RoundTripper.
func (c *httpUserAgentRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) {
	req = req.Clone(req.Context())
	req.Header.Set("User-Agent", c.userAgent)
	return c.rt.RoundTrip(req)
}