package client

import (
	"encoding/json"
	"fmt"
	"io"
)

// JSONPrinter is an implementation of ResourcePrinter which parsess raw JSON, and
// re-formats as indented, human-readable JSON.
type JSONPrinter struct{}

// Print parses the data as JSON, re-formats as JSON and prints the indented
// JSON.
func (y *JSONPrinter) Print(data []byte, w io.Writer) error {
	var obj interface{}
	if err := json.Unmarshal(data, &obj); err != nil {
		return err
	}
	output, err := json.MarshalIndent(obj, "", "  ")
	if err != nil {
		return err
	}
	_, err = fmt.Fprint(w, string(output))
	return err
}