package server

import (
	
	

	
)

var (
	// ErrNoActiveSession is returned when there is no active session in the context
	ErrNoActiveSession = errors.New("no active session")
	// ErrElicitationNotSupported is returned when the session does not support elicitation
	ErrElicitationNotSupported = errors.New("session does not support elicitation")
)

// RequestElicitation sends an elicitation request to the client.
// The client must have declared elicitation capability during initialization.
// The session must implement SessionWithElicitation to support this operation.
func ( *MCPServer) ( context.Context,  mcp.ElicitationRequest) (*mcp.ElicitationResult, error) {
	 := ClientSessionFromContext()
	if  == nil {
		return nil, ErrNoActiveSession
	}

	// Check if the session supports elicitation requests
	if ,  := .(SessionWithElicitation);  {
		if  := .Params.Validate();  != nil {
			return nil, 
		}
		return .RequestElicitation(, )
	}

	return nil, ErrElicitationNotSupported
}

// RequestURLElicitation sends a URL mode elicitation request to the client.
// This is used when the server needs the user to perform an out-of-band interaction.
func ( *MCPServer) (
	 context.Context,
	 ClientSession,
	 string,
	 string,
	 string,
) (*mcp.ElicitationResult, error) {
	if  == nil {
		return nil, ErrNoActiveSession
	}

	 := mcp.ElicitationParams{
		Mode:          mcp.ElicitationModeURL,
		Message:       ,
		ElicitationID: ,
		URL:           ,
	}

	if  := .Validate();  != nil {
		return nil, 
	}

	 := mcp.ElicitationRequest{
		Request: mcp.Request{
			Method: string(mcp.MethodElicitationCreate),
		},
		Params: ,
	}

	if ,  := .(SessionWithElicitation);  {
		return .RequestElicitation(, )
	}
	return nil, ErrElicitationNotSupported
}

// SendElicitationComplete sends a notification that a URL mode elicitation has completed
// SendElicitationComplete sends a notification that a URL mode elicitation has completed
func ( *MCPServer) (
	 context.Context,
	 ClientSession,
	 string,
) error {
	if  == nil {
		return ErrNoActiveSession
	}

	 := mcp.NewElicitationCompleteNotification()
	return .sendNotificationCore(, , )
}