package apiversions

import (
	"gerrit.mcp.mirantis.net/debian/gophercloud.git"
)

// APIVersions represents the result from getting a list of all versions available
type APIVersions struct {
	DefaultVersion APIVersion   `json:"default_version"`
	Versions       []APIVersion `json:"versions"`
}

// APIVersion represents an API version for Ironic
type APIVersion struct {
	// ID is the unique identifier of the API version.
	ID string `json:"id"`

	// MinVersion is the minimum microversion supported.
	MinVersion string `json:"min_version"`

	// Status is the API versions status.
	Status string `json:"status"`

	// Version is the maximum microversion supported.
	Version string `json:"version"`
}

// GetResult represents the result of a get operation.
type GetResult struct {
	gophercloud.Result
}

// ListResult represents the result of a list operation.
type ListResult struct {
	gophercloud.Result
}

// Extract is a function that accepts a get result and extracts an API version resource.
func (r GetResult) Extract() (*APIVersion, error) {
	var s struct {
		Version APIVersion `json:"version"`
	}

	err := r.ExtractInto(&s)
	if err != nil {
		return nil, err
	}

	return &s.Version, nil
}

// Extract is a function that accepts a list result and extracts an APIVersions resource
func (r ListResult) Extract() (*APIVersions, error) {
	var version APIVersions

	err := r.ExtractInto(&version)
	if err != nil {
		return nil, err
	}

	return &version, nil
}
