package main

import (
	"log/slog"
	"os"
)

// buangWaktu menghapus atribut waktu agar log stabil dan mudah dibandingkan.
func buangWaktu(groups []string, a slog.Attr) slog.Attr {
	if a.Key == slog.TimeKey {
		return slog.Attr{}
	}
	return a
}

func prosesPembayaran(logger *slog.Logger, user string, jumlah int) {
	logger.Info("mulai proses pembayaran", "user", user, "jumlah", jumlah)
	logger.Debug("rute server terpilih", "rute", "kantor-cabang-2")
	logger.Info("pembayaran selesai", "user", user)
}

func main() {
	// Handler level Info: pesan Debug disembunyikan.
	handlerInfo := slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{
		Level:       slog.LevelInfo,
		ReplaceAttr: buangWaktu,
	})
	logger := slog.New(handlerInfo)

	logger.Info("mode level Info: pesan Debug tidak tampil")
	prosesPembayaran(logger, "Budi", 150000)

	// Handler level Debug: pesan Debug ikut tampil.
	handlerDebug := slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{
		Level:       slog.LevelDebug,
		ReplaceAttr: buangWaktu,
	})
	loggerDebug := slog.New(handlerDebug)

	loggerDebug.Debug("detail koneksi dibuka", "user", "Siti", "attempt", 1)
}
