package imageutil

import (
	"encoding/base64"
	"encoding/json"

	binfotypes "github.com/moby/buildkit/util/buildinfo/types"
	"github.com/pkg/errors"
)

// BuildInfo returns build info from image config.
func BuildInfo(dt []byte) (*binfotypes.BuildInfo, error) {
	if len(dt) == 0 {
		return nil, nil
	}
	var config binfotypes.ImageConfig
	if err := json.Unmarshal(dt, &config); err != nil {
		return nil, errors.Wrap(err, "failed to unmarshal image config")
	}
	if len(config.BuildInfo) == 0 {
		return nil, nil
	}
	dtbi, err := base64.StdEncoding.DecodeString(config.BuildInfo)
	if err != nil {
		return nil, err
	}
	var bi binfotypes.BuildInfo
	if err = json.Unmarshal(dtbi, &bi); err != nil {
		return nil, errors.Wrap(err, "failed to decode buildinfo from image config")
	}
	return &bi, nil
}