# frozen_string_literal: true

module Gitlab
  module Ci
    module Pipeline
      module Chain
        module Limit
          class Deployments < Chain::Base
            extend ::Gitlab::Utils::Override
            include ::Gitlab::Ci::Pipeline::Chain::Helpers

            attr_reader :limit
            private :limit

            def initialize(*)
              super

              @limit = ::Gitlab::Ci::Pipeline::Quota::Deployments
                .new(project.namespace, pipeline, command)
            end

            override :perform!
            def perform!
              return unless limit.exceeded?

              limit.log_error!(project_id: project.id, plan: project.actual_plan_name)
              error(limit.message, drop_reason: :deployments_limit_exceeded)
            end

            override :break?
            def break?
              limit.exceeded?
            end
          end
        end
      end
    end
  end
end
