module IDRAC::SessionUtils

def delete_all_sessions_with_basic_auth

Delete all sessions using Basic Authentication
def delete_all_sessions_with_basic_auth
  debug = ->(msg, level=1, color=:light_cyan) { 
    verbosity = respond_to?(:verbosity) ? verbosity : 0
    return unless verbosity >= level
    msg = msg.send(color) if color && msg.respond_to?(color)
    puts msg
  }
  
  debug.call "Attempting to delete all sessions using Basic Authentication...", 1
  
  # First, get the list of sessions
  sessions_url = session&.determine_session_endpoint || '/redfish/v1/Sessions'
  
  begin
    # Get the list of sessions
    response = authenticated_request(:get, sessions_url)
    
    if response.status != 200
      debug.call "Failed to get sessions list: #{response.status} - #{response.body}", 1, :red
      return false
    end
    
    # Parse the response to get session IDs
    begin
      sessions_data = JSON.parse(response.body)
      
      if sessions_data['Members'] && sessions_data['Members'].any?
        debug.call "Found #{sessions_data['Members'].count} active sessions", 1, :light_yellow
        
        # Delete each session
        success = true
        sessions_data['Members'].each do |session|
          session_url = session['@odata.id']
          
          # Skip if no URL
          next unless session_url
          
          # Delete the session
          delete_response = authenticated_request(:delete, session_url)
          
          if delete_response.status == 200 || delete_response.status == 204
            debug.call "Successfully deleted session: #{session_url}", 1, :green
          else
            debug.call "Failed to delete session #{session_url}: #{delete_response.status}", 1, :red
            success = false
          end
          
          # Small delay between deletions
          sleep(1)
        end
        
        return success
      else
        debug.call "No active sessions found", 1, :light_yellow
        return true
      end
    rescue JSON::ParserError => e
      debug.call "Error parsing sessions response: #{e.message}", 1, :red
      return false
    end
  rescue => e
    debug.call "Error during session deletion with Basic Auth: #{e.message}", 1, :red
    return false
  end
end

def force_clear_sessions

def force_clear_sessions
  debug = ->(msg, level=1, color=:light_cyan) { 
    verbosity = respond_to?(:verbosity) ? verbosity : 0
    return unless verbosity >= level
    msg = msg.send(color) if color && msg.respond_to?(color)
    puts msg
  }
  
  debug.call "Attempting to force clear all sessions...", 1
  
  if delete_all_sessions_with_basic_auth
    debug.call "Successfully cleared sessions using Basic Auth", 1, :green
    true
  else
    debug.call "Failed to clear sessions using Basic Auth", 1, :red
    false
  end
end