// +build windows

package image

import (
	"crypto/sha512"
	"fmt"

	"github.com/docker/distribution/digest"
	"github.com/docker/docker/layer"
)

// RootFS describes images root filesystem
// This is currently a placeholder that only supports layers. In the future
// this can be made into a interface that supports different implementations.
type RootFS struct {
	Type      string         `json:"type"`
	DiffIDs   []layer.DiffID `json:"diff_ids,omitempty"`
	BaseLayer string         `json:"base_layer,omitempty"`
}

// BaseLayerID returns the 64 byte hex ID for the baselayer name.
func (r *RootFS) BaseLayerID() string {
	baseID := sha512.Sum384([]byte(r.BaseLayer))
	return fmt.Sprintf("%x", baseID[:32])
}

// ChainID returns the ChainID for the top layer in RootFS.
func (r *RootFS) ChainID() layer.ChainID {
	baseDiffID := digest.FromBytes([]byte(r.BaseLayerID()))
	return layer.CreateChainID(append([]layer.DiffID{layer.DiffID(baseDiffID)}, r.DiffIDs...))
}

// NewRootFS returns empty RootFS struct
func NewRootFS() *RootFS {
	return &RootFS{Type: "layers+base"}
}
