// Package runtime is a service runtime manager
package runtime

// Runtime is a service runtime manager
type Runtime interface {
	// Registers a service
	Create(*Service, ...CreateOption) error
	// Remove a service
	Delete(*Service) error
	// starts the runtime
	Start() error
	// Shutdown the runtime
	Stop() error
}

type Service struct {
	// name of the service
	Name string
	// url location of source
	Source string
	// path to store source
	Path string
	// exec command
	Exec string
}

var (
	DefaultRuntime = newRuntime()
)

func Create(s *Service, opts ...CreateOption) error {
	return DefaultRuntime.Create(s, opts...)
}

func Delete(s *Service) error {
	return DefaultRuntime.Delete(s)
}

func Start() error {
	return DefaultRuntime.Start()
}

func Stop() error {
	return DefaultRuntime.Stop()
}