package logger

import (
	"context"
)

// Field represents a key-value pair for structured logging.
// This is an alias for zap.Field to maintain compatibility with zap.
type Field = interface{}

// Logger defines the interface for structured logging.
// It provides methods for logging at different levels with structured fields.
type Logger interface {
	// Debug logs a message at debug level with optional fields.
	Debug(msg string, fields ...Field)

	// Info logs a message at info level with optional fields.
	Info(msg string, fields ...Field)

	// Warn logs a message at warning level with optional fields.
	Warn(msg string, fields ...Field)

	// Error logs a message at error level with optional fields.
	Error(msg string, fields ...Field)

	// With creates a child logger with the specified fields.
	// All subsequent log calls will include these fields.
	With(fields ...Field) Logger

	// WithContext creates a child logger with fields extracted from context.
	// Typically extracts request ID, user ID, and other context values.
	WithContext(ctx context.Context) Logger
}
