// Copyright 2017 The Go Authors. All rights reserved.
//
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file or at
// https://developers.google.com/open-source/licenses/bsd.

// This file implements an http.Client with request timeouts set by command
// line flags.

package main

import (
	"net"
	"net/http"

	"cloud.google.com/go/trace"
	"github.com/gregjones/httpcache"
	"github.com/gregjones/httpcache/memcache"
	"github.com/spf13/viper"

	"github.com/golang/gddo/httputil"
)

func newHTTPClient(v *viper.Viper) *http.Client {
	requestTimeout := v.GetDuration(ConfigRequestTimeout)
	t := &http.Transport{
		Proxy: http.ProxyFromEnvironment,
		Dial: (&net.Dialer{
			Timeout:   v.GetDuration(ConfigDialTimeout),
			KeepAlive: requestTimeout / 2,
		}).Dial,
		ResponseHeaderTimeout: requestTimeout / 2,
		TLSHandshakeTimeout:   requestTimeout / 2,
	}

	var rt http.RoundTripper
	if addr := v.GetString(ConfigMemcacheAddr); addr != "" {
		ct := httpcache.NewTransport(memcache.New(addr))
		ct.Transport = t
		rt = httputil.NewAuthTransport(ct)
	} else {
		rt = httputil.NewAuthTransport(t)
	}
	return &http.Client{
		// Wrap the cached transport with GitHub authentication.
		Transport: trace.Transport{Base: rt},
		Timeout:   requestTimeout,
	}
}
