# typed: true
# frozen_string_literal: true

module Tapioca
  module Runtime
    module Trackers
      module Tracker
        extend T::Sig
        extend T::Helpers

        abstract!

        class << self
          extend T::Sig

          sig { params(base: T.all(Tracker, Module)).void }
          def extended(base)
            Trackers.register_tracker(base)
            base.instance_exec do
              @enabled = true
            end
          end
        end

        sig { void }
        def disable!
          @enabled = false
        end

        def enabled?
          @enabled
        end

        def with_disabled_tracker(&block)
          original_state = @enabled
          @enabled = false

          block.call
        ensure
          @enabled = original_state
        end
      end
    end
  end
end