class IDRAC::Session

def create_session_with_basic_auth(url, payload)

def create_session_with_basic_auth(url, payload)
  begin
    debug "Creating session with Basic Auth", 0
    
    # Try first with JSON format
    response = request_with_basic_auth(:post, url, payload.to_json, 'application/json')
    
    debug "Response status: #{response.status}", 1
    debug "Response body size: #{response.body.to_s.size} bytes", 2
    
    if @verbosity >= 2 || response.status >= 400
      debug "Response body (first 500 chars): #{response.body.to_s[0..500]}", 2
    end
    
    if process_session_response(response)
      debug "Redfish session created successfully with Basic Auth (JSON)", 0, :green
      return true
    end
    
    # If that fails, try with form-urlencoded
    if response.status == 415 || (response.body.to_s.include?("unsupported media type"))
      debug "415 Unsupported Media Type with JSON, trying form-urlencoded", 0, :yellow
      
      form_data = "UserName=#{URI.encode_www_form_component(username)}&Password=#{URI.encode_www_form_component(password)}"
      form_response = request_with_basic_auth(:post, url, form_data, 'application/x-www-form-urlencoded')
      
      if process_session_response(form_response)
        debug "Redfish session created successfully with Basic Auth (form-urlencoded)", 0, :green
        return true
      elsif form_response.status == 400
        # Check for maximum sessions error
        if (form_response.body.include?("maximum number of user sessions") || 
            form_response.body.include?("RAC0218") || 
            form_response.body.include?("Internal Server Error"))
          debug "Maximum sessions reached detected during session creation", 0, :light_red
          @sessions_maxed = true
          return false
        end
      end
    elsif response.status == 400
      # Check for maximum sessions error
      if (response.body.include?("maximum number of user sessions") || 
          response.body.include?("RAC0218") || 
          response.body.include?("Internal Server Error"))
        debug "Maximum sessions reached detected during session creation", 0, :light_red
        @sessions_maxed = true
        return false
      end
    end
    
    # Try one more approach with no Content-Type header
    debug "Trying Basic Auth with no Content-Type header", 0, :yellow
    no_content_type_response = connection.post(url) do |req|
      req.headers['Authorization'] = "Basic #{Base64.strict_encode64("#{username}:#{password}")}"
      req.headers['Accept'] = '*/*'
      req.body = payload.to_json
    end
    
    if process_session_response(no_content_type_response)
      debug "Redfish session created successfully with Basic Auth (no content type)", 0, :green
      return true
    end
    
    debug "Failed to create Redfish session: #{response.status} - #{response.body}", 0, :red
    return false
  rescue Faraday::SSLError => e
    debug "SSL Error in Basic Auth request: #{e.message}", 0, :red
    debug "OpenSSL version: #{OpenSSL::OPENSSL_VERSION}", 1
    debug e.backtrace.join("\n"), 3 if e.backtrace && @verbosity >= 3
    return false
  rescue => e
    debug "Error during Redfish session creation with Basic Auth: #{e.class.name}: #{e.message}", 0, :red
    debug e.backtrace.join("\n"), 2 if e.backtrace && @verbosity >= 2
    return false
  end
end