package client

import (
	"net/http"
	"os"

	"github.com/docker/docker/client"
	"github.com/sirupsen/logrus"
)

func NewClientWithContext(contextName string) (*client.Client, error) {
	context, err := GetContext(contextName)
	if err != nil {
		return nil, err
	}
	ctxEndpoint, err := GetContextEndpoint(context)
	if err != nil {
		return nil, err
	}
	helper := newConnectionHelper(ctxEndpoint)
	httpClient := &http.Client{
		// No tls
		// No proxy
		Transport: &http.Transport{
			DialContext: helper.Dialer,
		},
	}

	var clientOpts []client.Opt

	clientOpts = append(clientOpts,
		client.WithHTTPClient(httpClient),
		client.WithHost(helper.Host),
		client.WithDialContext(helper.Dialer),
	)

	// FIXME: Maybe don't have this variable here and load it beforehand
	version := os.Getenv("DOCKER_API_VERSION")

	if version != "" {
		clientOpts = append(clientOpts, client.WithVersion(version))
	} else {
		clientOpts = append(clientOpts, client.WithAPIVersionNegotiation())
	}

	cl, err := client.NewClientWithOpts(clientOpts...)

	if err != nil {
		logrus.Fatalf("unable to create Docker client: %s", err)
	}
	return cl, nil
}