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 < GraphQLPreview::SchemaModification
            raise ArgumentError, "Preview #{preview} must inherit from `GraphQLPreview::SchemaModification`"
          end
        end

        previews.each { |preview| preview.apply_to_schema(self) }

        @enabled_previews = previews
      end

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