package ecr

import (
	"fmt"

	"github.com/aws/amazon-genomics-cli/internal/pkg/cli/clierror/actionableerror"
	"github.com/rs/zerolog/log"
)

type ImageReference struct {
	RegistryId     string
	Region         string
	RepositoryName string
	ImageTag       string
}

func (c *Client) VerifyImageExists(reference ImageReference) error {
	if !reference.isPopulated() {
		return fmt.Errorf("all fields of an ImageReference must be populated, recieved: '%+v'", reference)
	}

	log.Debug().Msgf("verifying presence of '%s:%s' in region: '%s' of registry (account): '%s'",
		reference.RepositoryName, reference.ImageTag, reference.Region, reference.RegistryId)

	ok, err := c.ImageListable(reference.RegistryId, reference.RepositoryName, reference.ImageTag, reference.Region)
	if err != nil {
		return actionableerror.FindSuggestionForError(err, actionableerror.AwsErrorMessageToSuggestedActionMap)
	}
	if !ok {
		return actionableerror.New(
			fmt.Errorf("cannot verify the presence of container '%s:%s' in region: '%s' of account: '%s'", reference.RepositoryName, reference.ImageTag, reference.Region, reference.RegistryId),
			"Please check your environment variables and permissions",
		)
	}
	return nil
}

func (r ImageReference) isPopulated() bool {
	return r.Region != "" && r.RegistryId != "" && r.ImageTag != "" && r.RepositoryName != ""
}