package image

import (
	"fmt"

	"github.com/pingcap/test-infra/pkg/docker"
	"github.com/pkg/errors"
)

const (
	arm64Arch = "arm64"
)

type ARM64ImageChecker struct {
	ImageExistCache map[string]error
}

func (c *ARM64ImageChecker) IsSupport(image string) (err error) {
	if res, ok := c.ImageExistCache[image]; ok {
		return res
	}
	defer func() {
		// cache query result
		c.ImageExistCache[image] = err
	}()

	checker, err := docker.NewImageCheckerFromImage(image)
	if err != nil {
		err = errors.Wrapf(err, "new checker on image `%s` error", image)
		return
	}
	support, err := checker.IsPlatformSupport(arm64Arch)
	if err != nil {
		err = errors.Wrapf(err, "check image `%s` error", image)
		return
	}
	if !support {
		err = fmt.Errorf("image `%s` lacks the ARM64 arch support", image)
		return
	}
	return
}
