package cluster

import (
	"strings"

	"github.com/samalba/dockerclient"
)

// Image is exported
type Image struct {
	dockerclient.Image

	Engine *Engine
}

func toImageName(repo string, name string, tag string) string {
	fullname := name
	if tag != "" {
		fullname = name + ":" + tag
	}
	if repo != "" {
		fullname = repo + "/" + fullname
	}
	return fullname
}

func parseImageName(fullname string) (repo string, name string, tag string) {
	parts := strings.SplitN(fullname, "/", 2)

	nameAndTag := parts[0]
	if len(parts) == 2 {
		repo = parts[0]
		nameAndTag = parts[1]
	}

	parts = strings.SplitN(nameAndTag, ":", 2)
	name = parts[0]
	if len(parts) == 2 {
		tag = parts[1]
	}

	return
}

// Match is exported
func (image *Image) Match(IDOrName string, matchTag bool) bool {
	size := len(IDOrName)

	if image.Id == IDOrName || (size > 2 && strings.HasPrefix(image.Id, IDOrName)) {
		return true
	}

	imageName := IDOrName
	repo, name, tag := parseImageName(imageName)
	if matchTag {
		if tag == "" {
			imageName = toImageName(repo, name, "latest")
		}
	} else {
		imageName = toImageName(repo, name, "")
	}

	for _, repoTag := range image.RepoTags {
		if matchTag == false {
			r, n, _ := parseImageName(repoTag)
			repoTag = toImageName(r, n, "")
		}
		if repoTag == imageName {
			return true
		}
	}
	return false
}