require "graphql"
require "graphql-preview/version"
require "graphql-preview/schema_modification"
require "graphql-preview/mask"
require "graphql-preview/member_from_path"
require "graphql-preview/extensions/enabled_previews"

module GraphQLPreview
  def self.visible?(member, context:)
    return true unless member.respond_to?(:metadata)
    return true unless member.metadata[:preview_toggled_by]

    unless context.key?(:schema_previews)
      raise ArgumentError, "[GraphQLPreview] `:schema_previews` was not provided to the `context`"
    end

    context[:schema_previews].include?(member.metadata[:preview_toggled_by].toggled_by)
  end
end

module GraphQL
  Schema.class_eval do
    # To support `graphql-ruby`'s `.define` based API
    include GraphQLPreview::Extensions::EnabledPreviews

    accepts_definitions \
      enabled_previews: -> (schema, previews = nil) { schema.enabled_previews(previews) }

    # To support `graphql-ruby`'s class-based API
    extend GraphQLPreview::Extensions::EnabledPreviews
  end
end