package client

import (
	"context"
	"io"
	"net/http"

	"github.com/moby/moby/api/types/registry"
)

// PluginPushOptions holds parameters to push a plugin.
type PluginPushOptions struct {
	RegistryAuth string // RegistryAuth is the base64 encoded credentials for the registry
}

// PluginPushResult is the result of a plugin push operation
type PluginPushResult struct {
	io.ReadCloser
}

// PluginPush pushes a plugin to a registry
func (cli *Client) PluginPush(ctx context.Context, name string, options PluginPushOptions) (PluginPushResult, error) {
	name, err := trimID("plugin", name)
	if err != nil {
		return PluginPushResult{}, err
	}
	resp, err := cli.post(ctx, "/plugins/"+name+"/push", nil, nil, http.Header{
		registry.AuthHeader: {options.RegistryAuth},
	})
	if err != nil {
		return PluginPushResult{}, err
	}
	return PluginPushResult{resp.Body}, nil
}