package filter

import (
	"encoding/json"
	"strings"

	"github.com/flosch/pongo2"
)

// JSONFilter is a pongo2 filter, which returns a json string of the input
func JSONFilter(in *pongo2.Value, param *pongo2.Value) (*pongo2.Value, *pongo2.Error) {
	pretty := false
	for _, s := range strings.Split(param.String(), ",") {
		switch s {
		case "pretty":
			pretty = true
		}
	}
	var err error
	var jsonBytes []byte
	if pretty {
		jsonBytes, err = json.MarshalIndent(in.Interface(), "", "    ")

	} else {
		jsonBytes, err = json.Marshal(in.Interface())
	}
	if err != nil {
		return nil, &pongo2.Error{
			Sender:    "filter:json",
			OrigError: err,
		}
	}

	return pongo2.AsSafeValue(string(jsonBytes)), nil
}
