// Package jsonw implements output writers for JSON.
package jsonw

import (
	"io"

	"github.com/neilotoole/sq/cli/output"
	"github.com/neilotoole/sq/cli/output/jsonw/internal"
	jcolorenc "github.com/neilotoole/sq/cli/output/jsonw/internal/jcolorenc"
	"github.com/neilotoole/sq/libsq/core/errz"
)

// writeJSON prints a JSON representation of v to out, using specs
// from pr.
func writeJSON(out io.Writer, pr *output.Printing, v any) error {
	enc := jcolorenc.NewEncoder(out)
	enc.SetColors(internal.NewColors(pr))
	enc.SetEscapeHTML(false)
	if !pr.Compact {
		enc.SetIndent("", pr.Indent)
	}

	err := enc.Encode(v)
	if err != nil {
		return errz.Err(err)
	}

	return nil
}