class Dependabot::Notice

def self.generate_deprecation_notice(version_manager, version_manager_type = :package_manager)

def self.generate_deprecation_notice(version_manager, version_manager_type = :package_manager)
  return nil unless version_manager.deprecated?
  mode = NoticeMode::WARN
  supported_versions_description = generate_supported_versions_description(
    version_manager.supported_versions,
    version_manager.support_later_versions?,
    version_manager_type
  )
  notice_type = "#{version_manager.name}_deprecated_warn"
  title = version_manager_type == :language ? "Language deprecation notice" : "Package manager deprecation notice"
  description = "Dependabot will stop supporting `#{version_manager.name} v#{version_manager.detected_version}`!"
  ## Add the supported versions to the description
  description += "\n\n#{supported_versions_description}\n" unless supported_versions_description.empty?
  Notice.new(
    mode: mode,
    type: notice_type,
    package_manager_name: version_manager.name,
    title: title,
    description: description,
    show_in_pr: true,
    show_alert: true
  )
end

def self.generate_supported_versions_description(

def self.generate_supported_versions_description(
  supported_versions, support_later_versions, version_manager_type = :package_manager
)
  entity_text = version_manager_type == :language ? "language" : "package manager"
  return "Please upgrade your #{entity_text} version" unless supported_versions&.any?
  versions_string = supported_versions.map { |version| "`v#{version}`" }
  versions_string[-1] = "or #{versions_string[-1]}" if versions_string.count > 1 && !support_later_versions
  versions_string = versions_string.join(", ")
  later_description = support_later_versions ? ", or later" : ""
  return "Please upgrade to version #{versions_string}#{later_description}." if supported_versions.count == 1
  "Please upgrade to one of the following versions: #{versions_string}#{later_description}."
end

def self.markdown_from_description(notice)

def self.markdown_from_description(notice)
  description = notice.description
  return if description.empty?
  markdown = "> [!#{markdown_mode(notice.mode)}]\n"
  # Log each non-empty line of the deprecation notice description
  description.each_line do |line|
    line = line.strip
    markdown += "> #{line}\n"
  end
  markdown += ">\n\n"
  markdown
end

def self.markdown_mode(mode)

def self.markdown_mode(mode)
  case mode
  when NoticeMode::INFO
    "INFO"
  when NoticeMode::WARN
    "WARNING"
  when NoticeMode::ERROR
    "IMPORTANT"
  else
    "INFO"
  end
end

def initialize(

def initialize(
  mode:, type:, package_manager_name:,
  title: "", description: "",
  show_in_pr: false, show_alert: false
)
  @mode = mode
  @type = type
  @package_manager_name = package_manager_name
  @title = title
  @description = description
  @show_in_pr = show_in_pr
  @show_alert = show_alert
end

def to_hash

def to_hash
  {
    mode: @mode,
    type: @type,
    package_manager_name: @package_manager_name,
    title: @title,
    description: @description,
    show_in_pr: @show_in_pr,
    show_alert: @show_alert
  }
end