// Package logging provides the structured logger used throughout the Command
// Center, including the credential-redaction helper required by CLAUDE.md.
package logging

import (
	"io"
	"os"
	"strings"

	"github.com/rs/zerolog"
)

// Setup configures and returns the application's root logger. Output is JSON to
// stdout. The caller is expected to derive sub-loggers via .With() for
// component context.
func Setup(level string, out io.Writer) zerolog.Logger {
	if out == nil {
		out = os.Stdout
	}
	zerolog.TimeFieldFormat = zerolog.TimeFormatUnix
	zerolog.LevelFieldName = "level"
	zerolog.MessageFieldName = "message"
	zerolog.TimestampFieldName = "ts"

	lvl := parseLevel(level)
	zerolog.SetGlobalLevel(lvl)

	return zerolog.New(out).With().
		Timestamp().
		Str("service", "command-center").
		Logger().
		Level(lvl)
}

func parseLevel(s string) zerolog.Level {
	switch strings.ToLower(strings.TrimSpace(s)) {
	case "trace":
		return zerolog.TraceLevel
	case "debug":
		return zerolog.DebugLevel
	case "info", "":
		return zerolog.InfoLevel
	case "warn", "warning":
		return zerolog.WarnLevel
	case "error":
		return zerolog.ErrorLevel
	default:
		return zerolog.InfoLevel
	}
}
