class Dependabot::Uv::FileUpdater::RequirementFileUpdater

def dependency

def dependency
  # For now, we'll only ever be updating a single dependency
  dependencies.first
end

def fetch_updated_dependency_files

def fetch_updated_dependency_files
  previous_requirements = dependency&.previous_requirements || []
  reqs = T.must(dependency).requirements.zip(previous_requirements)
  reqs.filter_map do |(new_req, old_req)|
    next if new_req == old_req
    file = get_original_file(new_req.fetch(:file)).dup
    updated_content =
      updated_requirement_or_setup_file_content(new_req, T.must(old_req))
    next if updated_content == file&.content
    file&.content = updated_content
    file
  end
end

def get_original_file(filename)

def get_original_file(filename)
  dependency_files.find { |f| f.name == filename }
end

def initialize(dependencies:, dependency_files:, credentials:, index_urls: nil)

def initialize(dependencies:, dependency_files:, credentials:, index_urls: nil)
  @dependencies = dependencies
  @dependency_files = dependency_files
  @credentials = credentials
  @index_urls = index_urls
  @updated_dependency_files = T.let(nil, T.nilable(T::Array[DependencyFile]))
end

def updated_dependency_files

def updated_dependency_files
  @updated_dependency_files ||= fetch_updated_dependency_files
end

def updated_requirement_or_setup_file_content(new_req, old_req)

def updated_requirement_or_setup_file_content(new_req, old_req)
  original_file = get_original_file(new_req.fetch(:file))
  raise "Could not find a dependency file for #{new_req}" unless original_file
  RequirementReplacer.new(
    content: original_file.content,
    dependency_name: dependency&.name,
    old_requirement: old_req.fetch(:requirement),
    new_requirement: new_req.fetch(:requirement),
    new_hash_version: dependency&.version,
    index_urls: @index_urls
  ).updated_content
end