//go:build debug

package nostr

import (
	"encoding/json"
	"fmt"
)

func debugLogf(str string, args ...any) {
	// this is such that we don't modify the actual args that may be used outside of this function
	printableArgs := make([]any, len(args))

	for i, v := range args {
		printableArgs[i] = stringify(v)
	}

	DebugLogger.Printf(str, printableArgs...)
}

func stringify(anything any) any {
	switch v := anything.(type) {
	case []any:
		// this is such that we don't modify the actual values that may be used outside of this function
		printableValues := make([]any, len(v))
		for i, subv := range v {
			printableValues[i] = stringify(subv)
		}
		return printableValues
	case []json.RawMessage:
		j, _ := json.Marshal(v)
		return string(j)
	case []byte:
		return string(v)
	case fmt.Stringer:
		return v.String()
	default:
		return v
	}
}