# frozen_string_literal: true
require_relative "query/request"
require_relative "query/response"
require_relative "resource/resource"
require_relative "source/db"
require_relative "source/rest"

module Qravan

  # Sources for data extractions class
  class Query
    attr_accessor :cargo

    def initialize(cargo)
      @cargo ||= cargo
    end

    def call(env)
      query = Rack::Request.new(env)
      request = Qravan::Request.new(JSON.parse(query.body.read), cargo)
      response = Qravan::Response.new(request)

      body = [response.answer]
      status  = 200
      headers = { "content-type" => "application/json" }

      [status, headers, body]
    end
  end
end