module Spreedly
  module Urls
    def find_payment_method_url(token)
      "#{base_url}/v1/payment_methods/#{token}.xml"
    end

    def find_transaction_url(token)
      "#{base_url}/v1/transactions/#{token}.xml"
    end

    def find_transcript_url(transaction_token)
      "#{base_url}/v1/transactions/#{transaction_token}/transcript"
    end

    def find_gateway_url(token)
      "#{base_url}/v1/gateways/#{token}.xml"
    end

    def purchase_url(gateway_token)
      "#{base_url}/v1/gateways/#{gateway_token}/purchase.xml"
    end

    def authorize_url(gateway_token)
      "#{base_url}/v1/gateways/#{gateway_token}/authorize.xml"
    end

    def verify_url(gateway_token)
      "#{base_url}/v1/gateways/#{gateway_token}/verify.xml"
    end

    def capture_url(authorization_token)
      "#{base_url}/v1/transactions/#{authorization_token}/capture.xml"
    end

    def void_transaction_url(token)
      "#{base_url}/v1/transactions/#{token}/void.xml"
    end

    def refund_transaction_url(token)
      "#{base_url}/v1/transactions/#{token}/credit.xml"
    end

    def retain_payment_method_url(payment_method_token)
      "#{base_url}/v1/payment_methods/#{payment_method_token}/retain.xml"
    end

    def redact_payment_method_url(payment_method_token)
      "#{base_url}/v1/payment_methods/#{payment_method_token}/redact.xml"
    end

    def recache_payment_method_url(payment_method_token)
      "#{base_url}/v1/payment_methods/#{payment_method_token}/recache.xml"
    end

    def redact_gateway_url(gateway_token)
      "#{base_url}/v1/gateways/#{gateway_token}/redact.xml"
    end

    def store_url(gateway_token)
      "#{base_url}/v1/gateways/#{gateway_token}/store.xml"
    end

    def list_transactions_url(since_token, payment_method_token, options = {})
      options.each do |key, val|
        options[key.to_sym] = val
      end

      params = []
      params << "since_token=#{since_token}" if since_token
      params << "count=#{options[:count]}" if options[:count]
      params << "order=#{options[:order]}" if options[:order]
      params << "state=#{options[:state]}" if options[:state]
      param_string = "?#{params.join('&')}" if params.any?
      return "#{base_url}/v1/transactions.xml#{param_string}" unless payment_method_token

      "#{base_url}/v1/payment_methods/#{payment_method_token}/transactions.xml#{param_string}"
    end

    def list_payment_methods_url(since_token)
      since_param = "?since_token=#{since_token}" if since_token
      "#{base_url}/v1/payment_methods.xml#{since_param}"
    end

    def list_gateways_url(since_token)
      since_param = "?since_token=#{since_token}" if since_token
      "#{base_url}/v1/gateways.xml#{since_param}"
    end

    def gateway_options_url
      "#{base_url}/v1/gateways.xml"
    end

    def add_gateway_url
      "#{base_url}/v1/gateways.xml"
    end

    def receiver_options_url
      "#{base_url}/v1/receivers_options.xml"
    end

    def add_receiver_url
      "#{base_url}/v1/receivers.xml"
    end

    def redact_receiver_url(token)
      "#{base_url}/v1/receivers/#{token}/redact.xml"
    end

    def add_payment_method_url
      "#{base_url}/v1/payment_methods.xml"
    end

    def update_payment_method_url(token)
      "#{base_url}/v1/payment_methods/#{token}.xml"
    end

    def deliver_to_receiver_url(receiver_token)
      "#{base_url}/v1/receivers/#{receiver_token}/deliver.xml"
    end
  end
end