# typed: true # rubocop:todo Sorbet/StrictSigil
# frozen_string_literal: true

module Homebrew
  module Bundle
    module TapInstaller
      def self.preinstall(name, verbose: false, **_options)
        if installed_taps.include? name
          puts "Skipping install of #{name} tap. It is already installed." if verbose
          return false
        end

        true
      end

      def self.install(name, preinstall: true, verbose: false, force: false, **options)
        return true unless preinstall

        puts "Installing #{name} tap. It is not currently installed." if verbose
        args = []
        args << "--force" if force

        success = if options[:clone_target]
          Bundle.brew("tap", name, options[:clone_target], *args, verbose:)
        else
          Bundle.brew("tap", name, *args, verbose:)
        end

        unless success
          require "bundle/skipper"
          Homebrew::Bundle::Skipper.tap_failed!(name)
          return false
        end

        installed_taps << name
        true
      end

      def self.installed_taps
        require "bundle/tap_dumper"
        @installed_taps ||= Homebrew::Bundle::TapDumper.tap_names
      end
    end
  end
end
