package run

import (
	"bytes"
	"fmt"

	docker "github.com/fsouza/go-dockerclient"

	"github.com/openshift/origin/pkg/bootstrap/docker/errors"
)

type runError struct {
	error
	out, err []byte
	config   *docker.Config
}

func newRunError(rc int, cause error, stdOut, errOut []byte, config *docker.Config) error {
	return &runError{
		error:  errors.NewError("Docker run error rc=%d", rc).WithCause(cause),
		out:    stdOut,
		err:    errOut,
		config: config,
	}
}

func (e *runError) Details() string {
	out := &bytes.Buffer{}
	fmt.Fprintf(out, "Image: %s\n", e.config.Image)
	fmt.Fprintf(out, "Entrypoint: %v\n", e.config.Entrypoint)
	fmt.Fprintf(out, "Command: %v\n", e.config.Cmd)
	if len(e.out) > 0 {
		errors.PrintLog(out, "Output", e.out)
	}
	if len(e.err) > 0 {
		errors.PrintLog(out, "Error Output", e.err)
	}
	return out.String()
}