class Threoze::Paya::VaultService < Threoze::Paya::ApplicationService
  def initialize(school, method, data={})
    @method = method
    @data = data
    super(school)
  end

  def call
    response = case @method
    when :index
      params = { params: { accountvault_c1: "school_#{@school.id}" } }
      RestClient.get(endpoint, headers.merge(params))
    when :update
      url = "#{endpoint}/#{options[:vault_id]}"
      RestClient.put(url, { accountvault: options }, headers)
    when :destroy
      url = "#{endpoint}/#{options[:vault_id]}"
      RestClient.delete(url, headers)
      return { deleted: true }
    end

    response = JSON.parse(response)
    return response['accountvaults'].first if @method == :index

    response
  rescue RestClient::Exception => e
    JSON.parse(e.response.body)
  end

  private
    def endpoint
      "#{base_uri}/accountvaults"
    end

    def options
      {}.tap do |props|
        props[:vault_id] = @data[:id] if @data[:id]
        props[:exp_date] = @data[:exp_date] if @data[:exp_date]
      end
    end
end
