class IDRAC::Session

def create_session_with_form_urlencoded(url, payload)

def create_session_with_form_urlencoded(url, payload)
  # Only try with form-urlencoded if we had a 415 error previously
  begin
    debug "Trying with form-urlencoded content type", 1
    debug "URL: #{base_url}#{url}", 1
    
    # Try first without any authorization header
    response = connection.post(url) do |req|
      req.headers['Content-Type'] = 'application/x-www-form-urlencoded'
      req.headers['Accept'] = '*/*'
      req.headers['Host'] = host_header if host_header
      req.body = "UserName=#{URI.encode_www_form_component(username)}&Password=#{URI.encode_www_form_component(password)}"
      debug "Request headers: #{req.headers.reject { |k,v| k =~ /auth/i }.to_json}", 2
    end
    
    debug "Response status: #{response.status}", 1
    debug "Response headers: #{response.headers.to_json}", 2
    debug "Response body: #{response.body}", 3
    
    if process_session_response(response)
      debug "Redfish session created successfully with form-urlencoded", 1, :green
      return true
    end
    
    # If that fails, try with Basic Auth + form-urlencoded
    debug "Trying form-urlencoded with Basic Auth", 1
    auth_response = request_with_basic_auth(:post, url, "UserName=#{URI.encode_www_form_component(username)}&Password=#{URI.encode_www_form_component(password)}", 'application/x-www-form-urlencoded')
    
    if process_session_response(auth_response)
      debug "Redfish session created successfully with form-urlencoded + Basic Auth", 1, :green
      return true
    end
    
    # Last resort: try with both headers (some iDRAC versions need this)
    debug "Trying with both Content-Type headers", 1
    both_response = connection.post(url) do |req|
      req.headers['Content-Type'] = 'application/x-www-form-urlencoded'
      req.headers['Accept'] = 'application/json'
      req.headers['X-Requested-With'] = 'XMLHttpRequest'
      req.headers['Authorization'] = "Basic #{Base64.strict_encode64("#{username}:#{password}")}"
      req.headers['Host'] = host_header if host_header
      req.body = "UserName=#{URI.encode_www_form_component(username)}&Password=#{URI.encode_www_form_component(password)}"
    end
    
    if process_session_response(both_response)
      debug "Redfish session created successfully with multiple content types", 1, :green
      return true
    else
      debug "Failed with form-urlencoded too: #{response.status} - #{response.body}", 1, :red
      return false
    end
  rescue Faraday::SSLError => e
    debug "SSL Error in form-urlencoded request: #{e.message}", 1, :red
    debug "OpenSSL version: #{OpenSSL::OPENSSL_VERSION}", 1
    debug "Connection URL: #{base_url}#{url}", 1
    debug e.backtrace.join("\n"), 3 if e.backtrace && @verbosity >= 3
    return false
  rescue => e
    debug "Error during form-urlencoded session creation: #{e.class.name}: #{e.message}", 1, :red
    debug e.backtrace.join("\n"), 2 if e.backtrace && @verbosity >= 2
    return false
  end
end