package runtime

import (
	"net"
	"net/http"
	"time"
)

const (
	MaxRawResponseBytes = 1 << 20
	totalTimeout        = 15 * time.Second
	connectTimeout      = 5 * time.Second
)

func defaultHTTPClient() *http.Client {
	return &http.Client{
		Transport:     providerHTTPTransport(),
		Timeout:       totalTimeout,
		CheckRedirect: rejectRedirect,
	}
}

func providerHTTPTransport() *http.Transport {
	transport := http.DefaultTransport.(*http.Transport).Clone()
	transport.Proxy = nil
	transport.DialContext = providerDialer().DialContext
	return transport
}

func providerDialer() *net.Dialer {
	return &net.Dialer{
		Timeout:   connectTimeout,
		KeepAlive: 30 * time.Second,
	}
}

func rejectRedirect(*http.Request, []*http.Request) error {
	return http.ErrUseLastResponse
}
