class CapabilityGenerator

def generate_capabilities(existing_code) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength

rubocop:disable Metrics/AbcSize,Metrics/MethodLength
def generate_capabilities(existing_code) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
  max_retries = 3
  retries = 0
  loop do # rubocop:disable Metrics/BlockLength
    puts "  Attempt #{retries + 1}/#{max_retries}..."
    begin
      gemini = RubyLLM.chat(model: 'gemini-1.5-pro-latest')
                      .with_temperature(0.1)
      docs_json = JSON.pretty_generate(@processed_html)
      prompt = <<~PROMPT
        Update RubyLLM::Providers::#{@provider_name.capitalize}::Capabilities module.
        Only use the provided HTML content and existing code structure.
        Focus on updating values while preserving the module structure.
        Existing code to maintain structure:
        ```ruby
        #{existing_code}
        ```
        HTML content to extract new values from:
        ```json
        #{docs_json}
        ```
        Return ONLY the complete Ruby code within ```ruby ``` tags.
      PROMPT
      response = gemini.ask(prompt)
      generated_code = CodeValidator.extract_code_from_response(response.content)
      return generated_code if generated_code && CodeValidator.validate_syntax(generated_code)
    rescue RubyLLM::BadRequestError => e
      puts "  Error: #{e.message}"
      # Try with even less content if we hit token limits
      @processed_html = @processed_html.transform_values { |html| html[0..10_000] }
    rescue StandardError => e
      puts "  Error: #{e.class} - #{e.message}"
    end
    retries += 1
    break if retries >= max_retries
  end
  nil
end