class Buildkite::TestCollector::HTTPClient

def authorization_header

def authorization_header
  "Token token=\"#{@api_token}\""
end

def initialize(url:, api_token:)

def initialize(url:, api_token:)
  @url = url
  @api_token = api_token
end

def metadata

def metadata
  endpoint_uri = URI.parse("#{url}/metadata")
  http = Net::HTTP.new(endpoint_uri.host, endpoint_uri.port)
  http.use_ssl = endpoint_uri.scheme == "https"
  request = Net::HTTP::Get.new(endpoint_uri.path, {
    "Authorization" => authorization_header,
    "Content-Type" => "application/json"
  })
  http.request(request)
end

def post_upload(data:, run_env:, tags:)

def post_upload(data:, run_env:, tags:)
  endpoint_uri = URI.parse(url)
  http = Net::HTTP.new(endpoint_uri.host, endpoint_uri.port)
  http.use_ssl = endpoint_uri.scheme == "https"
  request = Net::HTTP::Post.new(endpoint_uri.path, {
    "Authorization" => authorization_header,
    "Content-Type" => "application/json",
    "Content-Encoding" => "gzip",
  })
  data_set = data.map(&:as_hash)
  body = {
    run_env: run_env,
    tags: tags,
    format: "json",
    data: data_set
  }.to_json
  compressed_body = StringIO.new
  writer = Zlib::GzipWriter.new(compressed_body)
  writer.write(body)
  writer.close
  request.body = compressed_body.string
  response = http.request(request)
  if response.is_a?(Net::HTTPSuccess)
    response
  else
    raise "HTTP Request Failed: #{response.code} #{response.message}"
  end
end