module RubyLLM::MCP::Providers::OpenAI::ComplexParameterSupport

def param_schema(param) # rubocop:disable Metrics/MethodLength

rubocop:disable Metrics/MethodLength
def param_schema(param) # rubocop:disable Metrics/MethodLength
  properties = case param.type
               when :array
                 if param.item_type == :object
                   {
                     type: param.type,
                     title: param.title,
                     description: param.description,
                     items: {
                       type: param.item_type,
                       properties: param.properties.transform_values { |value| param_schema(value) }
                     }
                   }.compact
                 else
                   {
                     type: param.type,
                     title: param.title,
                     description: param.description,
                     default: param.default,
                     items: { type: param.item_type, enum: param.enum }.compact
                   }.compact
                 end
               when :object
                 {
                   type: param.type,
                   title: param.title,
                   description: param.description,
                   properties: param.properties.transform_values { |value| param_schema(value) },
                   required: param.properties.select { |_, p| p.required }.keys
                 }.compact
               when :union
                 {
                   param.union_type => param.properties.map { |property| param_schema(property) }
                 }
               else
                 {
                   type: param.type,
                   title: param.title,
                   description: param.description
                 }.compact
               end
  properties.compact
end