# frozen_string_literal: true

module ReleaseTools
  module InternalRelease
    module Finalize
      class ReleaseManagersNotifier < PackageAvailabilityBaseNotifier
        def initialize(versions)
          @versions = versions
        end

        private

        attr_reader :versions

        def project
          ReleaseTools::Project::Release::Tasks
        end

        def regular_versions
          versions.map(&:to_minor).join(' and ')
        end

        def internal_task_issue
          @internal_task_issue ||=
            Retriable.with_context(:api) do
              client.issues(project, options).first
            end
        end

        def release_managers
          @release_managers ||= ReleaseTools::ReleaseManagers::Schedule.new
        end

        def usernames(users)
          users.map do |user|
            "@#{user.username}"
          end.join(' ')
        end

        def template
          File.read(
            File.expand_path('../../../../templates/internal_release_issue_note.md.erb', __dir__)
          )
        end

        def perform_notification
          notify_slack_package_availability
          notify_issue(internal_task_issue, body)
        end

        def notify_slack_package_availability
          ReleaseTools::Slack::InternalRelease::PackageAvailabilityNotifier.new(versions).execute
        end

        def job_type
          'Notifying internal release about package availability'
        end

        def target_group
          'release managers'
        end
      end
    end
  end
end
