package httpclientmdl

import (
	"net/http"
	"time"

	"corelab.mkcl.org/MKCLOS/coredevelopmentplatform/corepkgv2/constantmdl"
)

// GetHTTPClient This method will return the httpClient object with preconfigured settings
func GetHTTPClient() *http.Client {

	transport := &http.Transport{
		MaxIdleConns:        constantmdl.MAXIDLECONNS,
		MaxIdleConnsPerHost: constantmdl.MAXIDLECONNSPERHOST,
		IdleConnTimeout:     constantmdl.IDLECONNTIMEOUT,
	}
	httpClient := &http.Client{
		Transport: transport,
	}
	return httpClient
}

type HTTPTransport struct {
	MaxIdleConns        int
	MaxIdleConnsPerHost int
	IdleConnTimeout     time.Duration
}

// GetHTTPClient This method will return the httpClient object with preconfigured settings
func GetHTTPClientWithConfig(httpTransport HTTPTransport) *http.Client {

	if httpTransport.MaxIdleConns == 0 {
		httpTransport.MaxIdleConns = constantmdl.MAXIDLECONNS
	}
	if httpTransport.MaxIdleConnsPerHost == 0 {
		httpTransport.MaxIdleConnsPerHost = constantmdl.MAXIDLECONNSPERHOST
	}
	if httpTransport.IdleConnTimeout == 0 {
		httpTransport.IdleConnTimeout = constantmdl.IDLECONNTIMEOUT
	}
	transport := &http.Transport{
		MaxIdleConns:        httpTransport.MaxIdleConns,
		MaxIdleConnsPerHost: httpTransport.MaxIdleConnsPerHost,
		IdleConnTimeout:     httpTransport.IdleConnTimeout,
	}
	httpClient := &http.Client{
		Transport: transport,
	}
	return httpClient
}