package initwd

import (
	version "github.com/hashicorp/go-version"
)

// ModuleInstallHooks is an interface used to provide notifications about the
// installation process being orchestrated by InstallModules.
//
// This interface may have new methods added in future, so implementers should
// embed InstallHooksImpl to get no-op implementations of any unimplemented
// methods.
type ModuleInstallHooks interface {
	// Download is called for modules that are retrieved from a remote source
	// before that download begins, to allow a caller to give feedback
	// on progress through a possibly-long sequence of downloads.
	Download(moduleAddr, packageAddr string, version *version.Version)

	// Install is called for each module that is installed, even if it did
	// not need to be downloaded from a remote source.
	Install(moduleAddr string, version *version.Version, localPath string)
}

// ModuleInstallHooksImpl is a do-nothing implementation of InstallHooks that
// can be embedded in another implementation struct to allow only partial
// implementation of the interface.
type ModuleInstallHooksImpl struct {
}

func (h ModuleInstallHooksImpl) Download(moduleAddr, packageAddr string, version *version.Version) {
}

func (h ModuleInstallHooksImpl) Install(moduleAddr string, version *version.Version, localPath string) {
}

var _ ModuleInstallHooks = ModuleInstallHooksImpl{}
