package client

import (
	"github.com/docker/cli/cli/connhelper"
	"github.com/docker/cli/cli/context/docker"
	dCliContextStore "github.com/docker/cli/cli/context/store"
	dClient "github.com/docker/docker/client"
	"github.com/sirupsen/logrus"
)

func newConnectionHelper(daemonURL string) *connhelper.ConnectionHelper {
	helper, err := connhelper.GetConnectionHelper(daemonURL)

	if err != nil {
		logrus.Fatal(err)
	}
	return helper
}

func getDockerEndpoint(host string) (docker.Endpoint, error) {
	skipTLSVerify := false
	ep := docker.Endpoint{
		EndpointMeta: docker.EndpointMeta{
			Host:          host,
			SkipTLSVerify: skipTLSVerify,
		},
	}
	// try to resolve a docker client, validating the configuration
	opts, err := ep.ClientOpts()
	if err != nil {
		return docker.Endpoint{}, err
	}
	if _, err := dClient.NewClientWithOpts(opts...); err != nil {
		return docker.Endpoint{}, err
	}
	return ep, nil
}

func getDockerEndpointMetadataAndTLS(host string) (docker.EndpointMeta, *dCliContextStore.EndpointTLSData, error) {
	ep, err := getDockerEndpoint(host)
	if err != nil {
		return docker.EndpointMeta{}, nil, err
	}
	return ep.EndpointMeta, ep.TLSData.ToStoreTLSData(), nil
}