class RubyLLM::MCP::NotificationHandler

def default_process_logging_message(notification, logger: RubyLLM::MCP.logger)

def default_process_logging_message(notification, logger: RubyLLM::MCP.logger)
  level = notification.params["level"]
  logger_message = notification.params["logger"]
  message = notification.params["data"]
  message = "#{logger_message}: #{message}"
  case level
  when "debug"
    logger.debug(message["message"])
  when "info", "notice"
    logger.info(message["message"])
  when "warning"
    logger.warn(message["message"])
  when "error", "critical"
    logger.error(message["message"])
  when "alert", "emergency"
    logger.fatal(message["message"])
  end
end

def execute(notification)

def execute(notification)
  case notification.type
  when "notifications/tools/list_changed"
    client.reset_tools!
  when "notifications/resources/list_changed"
    client.reset_resources!
  when "notifications/resources/updated"
    process_resource_updated(notification)
  when "notifications/prompts/list_changed"
    client.reset_prompts!
  when "notifications/message"
    process_logging_message(notification)
  when "notifications/progress"
    process_progress_message(notification)
  when "notifications/cancelled"
    # TODO: - do nothing at the moment until we support client operations
  else
    process_unknown_notification(notification)
  end
end

def initialize(coordinator)

def initialize(coordinator)
  @coordinator = coordinator
  @client = coordinator.client
end

def process_logging_message(notification)

def process_logging_message(notification)
  if client.logging_handler_enabled?
    client.on[:logging].call(notification)
  else
    default_process_logging_message(notification)
  end
end

def process_progress_message(notification)

def process_progress_message(notification)
  if client.tracking_progress?
    progress_obj = RubyLLM::MCP::Progress.new(self, client.on[:progress], notification.params)
    progress_obj.execute_progress_handler
  end
end

def process_resource_updated(notification)

def process_resource_updated(notification)
  uri = notification.params["uri"]
  resource = client.resources.find { |r| r.uri == uri }
  resource&.reset_content!
end

def process_unknown_notification(notification)

def process_unknown_notification(notification)
  message = "Unknown notification type: #{notification.type} params: #{notification.params.to_h}"
  RubyLLM::MCP.logger.error(message)
end