package waiter

import (
	
	

	
	
)

// Logger is the Logger middleware used by the waiter to log an attempt
type Logger struct {
	// Attempt is the current attempt to be logged
	Attempt int64
}

// ID representing the Logger middleware
func (*Logger) () string {
	return "WaiterLogger"
}

// HandleInitialize performs handling of request in initialize stack step
func ( *Logger) ( context.Context,  middleware.InitializeInput,  middleware.InitializeHandler) (
	 middleware.InitializeOutput,  middleware.Metadata,  error,
) {
	 := middleware.GetLogger()

	.Logf(logging.Debug, fmt.Sprintf("attempting waiter request, attempt count: %d", .Attempt))

	return .HandleInitialize(, )
}

// AddLogger is a helper util to add waiter logger after `SetLogger` middleware in
func ( Logger) ( *middleware.Stack) error {
	return .Initialize.Insert(&, "SetLogger", middleware.After)
}