module GraphQLPreview
  module Extensions
    module EnabledPreviews
      def enabled_previews(previews = nil)
        return @enabled_previews if previews.nil?

        unless previews.is_a?(Array)
          raise ArgumentError, "Expected `enabled_previews` to be an array, but it was `#{previews.class}`"
        end

        previews.each do |preview|
          unless preview.ancestors.any? { |ancestor| ancestor == GraphQLPreview::SchemaModification }
            raise ArgumentError, "One of your `enabled_previews` items does not descend from `GraphQLPreview::SchemaModification`"
          end
        end

        @enabled_previews = previews
      end

      def enabled_previews=(previews)
        enabled_previews(previews)
      end
    end
  end
end