class Dependabot::PullRequestCreator::BranchNamer

def build_dependency_group_strategy

def build_dependency_group_strategy
  DependencyGroupStrategy.new(
    dependencies: dependencies,
    files: files,
    target_branch: target_branch,
    dependency_group: T.must(dependency_group),
    includes_security_fixes: includes_security_fixes,
    separator: separator,
    prefix: prefix,
    max_length: max_length
  )
end

def build_multi_ecosystem_strategy

def build_multi_ecosystem_strategy
  MultiEcosystemStrategy.new(
    dependencies: dependencies,
    files: files,
    target_branch: target_branch,
    includes_security_fixes: includes_security_fixes,
    separator: separator,
    prefix: prefix,
    max_length: max_length,
    multi_ecosystem_name: T.must(multi_ecosystem_name)
  )
end

def build_solo_strategy

def build_solo_strategy
  SoloStrategy.new(
    dependencies: dependencies,
    files: files,
    target_branch: target_branch,
    separator: separator,
    prefix: prefix,
    max_length: max_length
  )
end

def initialize(dependencies:, files:, target_branch:, dependency_group: nil, separator: "/",

def initialize(dependencies:, files:, target_branch:, dependency_group: nil, separator: "/",
               prefix: "dependabot", max_length: nil, includes_security_fixes: false, multi_ecosystem_name: nil)
  @dependencies  = dependencies
  @files         = files
  @target_branch = target_branch
  @dependency_group = dependency_group
  @separator     = separator
  @prefix        = prefix
  @max_length    = max_length
  @includes_security_fixes = includes_security_fixes
  @multi_ecosystem_name = multi_ecosystem_name
end

def new_branch_name

def new_branch_name
  strategy.new_branch_name
end

def strategy

def strategy
  @strategy ||= T.let(
    if multi_ecosystem_name
      build_multi_ecosystem_strategy
    elsif dependency_group.nil?
      build_solo_strategy
    else
      build_dependency_group_strategy
    end,
    T.nilable(Dependabot::PullRequestCreator::BranchNamer::Base)
  )
end