module Superfaktura
  class BaseApi
    SUPERFAKTURA_URL = 'https://moja.superfaktura.sk'.freeze

    def self.client
      Faraday.new(url: SUPERFAKTURA_URL) do |builder|
        builder.request :url_encoded
        builder.request :json
        builder.response :json

        builder.adapter Faraday.default_adapter
      end
    end

    def self.request(uri, method = 'POST', payload = nil)
      response = client.public_send(method.downcase.to_sym) do |request|
        request.headers['Authorization'] = "SFAPI email=#{Superfaktura.config.email}&apikey=#{Superfaktura.config.token}"

        request.url(uri)
        request.body = "data=#{payload.to_json}" if payload
      end
      raise Superfaktura::Error, response.body['error_message'] unless response.body['error'].zero?

      response.body
    end

    def self.post(path, payload)
      request(path, 'POST', payload)
    end

    def self.get(path, payload = nil)
      request(path, 'GET', payload)
    end
  end
end