module Text.HJson.Pretty (toString) where

import Data.List
import qualified Data.Map as Map
import qualified Text.HJson as JSON
import Text.HJson (Json(..))

-- | Pretty-prints JSON with given indenter
toString :: String -> Json -> String
toString s j = toString' s 0 j

toString' :: String -> Integer -> Json -> String

toString' indenter levels (JArray xs) = "[" ++ (intercalate ", " $ map (toString' indenter levels) xs) ++ "]"

toString' indenter levels (JObject mp) = let
	currentIndent = (concat (genericReplicate levels indenter))
		in intercalate "\n" $ ["{", intercalate ",\n" (map (((currentIndent ++ indenter) ++) . (\(key, value) -> toString' indenter levels (JString key) ++ ": " ++ toString' indenter (levels + 1) value)) $ Map.toList mp), currentIndent ++ "}"]
toString' _ _ a = JSON.toString a