package log

import (
	
	
	
	
)

var (
	colorReset  = "\033[0m"
	colorFaded  = "\033[2m" // Dim for faded text (timestamp)
	colorRed    = "\033[31m"
	colorGreen  = "\033[32m"
	colorYellow = "\033[33m"
	colorCyan   = "\033[36m"
)

type PrettyHandler struct {
	handler slog.Handler
}

func ( slog.Handler) *PrettyHandler {
	return &PrettyHandler{handler: }
}

func ( *PrettyHandler) ( context.Context,  slog.Record) error {
	 := getFadedTimestamp(.Time)

	 := getColorForLevel(.Level)
	 := fmt.Sprintf("%s%-5s%s", , .Level.String(), colorReset)

	var  string
	 += fmt.Sprintf("%s %s %s", , , .Message)

	.Attrs(func( slog.Attr) bool {
		 += fmt.Sprintf(" %s=%v", .Key, .Value)
		return true
	})

	fmt.Println()
	return nil
}

func ( *PrettyHandler) ( []slog.Attr) slog.Handler {
	return &PrettyHandler{handler: .handler.WithAttrs()}
}

func ( *PrettyHandler) ( string) slog.Handler {
	return &PrettyHandler{handler: .handler.WithGroup()}
}

func getFadedTimestamp( time.Time) string {
	return fmt.Sprintf("%s%s%s", colorFaded, .Format(time.RFC3339), colorReset)
}

func getColorForLevel( slog.Level) string {
	switch {
	case  == slog.LevelError:
		return colorRed
	case  == slog.LevelWarn:
		return colorYellow
	case  == slog.LevelInfo:
		return colorGreen
	case  == slog.LevelDebug:
		return colorCyan
	default:
		return colorReset
	}
}

func ( *PrettyHandler) ( context.Context,  slog.Level) bool {
	return .handler.Enabled(, )
}