# frozen_string_literal: true

require 'rake_factory'

require_relative '../mixins/support'

module RakeGitCrypt
  module Tasks
    class Reinstall < RakeFactory::Task
      include Mixins::Support

      default_name :reinstall
      default_description 'Reinstall git-crypt.'

      parameter :uninstall_task_name, default: :uninstall
      parameter :install_task_names, default: [:install]

      action do |task, args|
        puts('Reinstalling git-crypt...')
        validate(task)
        uninstall_git_crypt(task, args)
        install_git_crypt(task, args)
      end

      private

      def validate(task)
        [uninstall_task_name, *install_task_names].each do |name|
          raise_task_undefined(name) unless task_defined?(task, name)
        end
      end

      def uninstall_git_crypt(task, args)
        invoke_task_with_name(task, uninstall_task_name, args)
      end

      def install_git_crypt(task, args)
        install_task_names.each do |install_task_name|
          invoke_task_with_name(task, install_task_name, args)
        end
      end
    end
  end
end