package hcsshim

import "github.com/Sirupsen/logrus"

// TerminateComputeSystem force terminates a container.
func TerminateComputeSystem(id string, timeout uint32, context string) error {
	return shutdownTerminate(false, id, timeout, context)
}

// ShutdownComputeSystem shuts down a container by requesting a shutdown within
// the container operating system.
func ShutdownComputeSystem(id string, timeout uint32, context string) error {
	return shutdownTerminate(true, id, timeout, context)
}

// shutdownTerminate is a wrapper for ShutdownComputeSystem and TerminateComputeSystem
// which have very similar calling semantics
func shutdownTerminate(shutdown bool, id string, timeout uint32, context string) error {

	var (
		title = "HCSShim::"
	)
	if shutdown {
		title = title + "ShutdownComputeSystem"
	} else {
		title = title + "TerminateComputeSystem"
	}
	logrus.Debugf(title+" id=%s context=%s", id, context)

	var err error
	if shutdown {
		err = shutdownComputeSystem(id, timeout)
	} else {
		err = terminateComputeSystem(id)
	}

	if err != nil {
		return makeErrorf(err, title, "id=%s context=%s", id, context)
	}

	logrus.Debugf(title+" succeeded id=%s context=%s", id, context)
	return nil
}