require 'questrade_api/rest/time'
require 'questrade_api/rest/account'
require 'questrade_api/rest/balance'
require 'questrade_api/rest/position'
require 'questrade_api/rest/execution'
require 'questrade_api/rest/activity'
require 'questrade_api/rest/order'

module QuestradeApi
  module AccountCall
    # Fetch current server time.
    #
    # @return [DateTime] if no issues to call /time endpoint occurs.
    # @return [Faraday::Response] if current server time cannot be fetched.
    def time
      time = QuestradeApi::REST::Time.new(authorization)
      time.fetch
    end

    # Fetch all accounts associated with user.
    #
    # @return [Array<QuestradeApi::REST::Account>]
    def accounts
      QuestradeApi::REST::Account.fetch(authorization)
    end

    # Fetch all positions associated with account.
    #
    # @param account_id [String] to which positions will be fetched.
    #
    # @return [OpenStruct(accounts: Array<QuestradeApi::REST::Position>)]
    def positions()
      QuestradeApi::REST::Position.fetch(authorization, )
    end

    # Fetch all balances associated with account.
    #
    # @param account_id [String] to which balances will be fetched.
    #
    # @return [OpenStruct(per_currency_balances)]
    def balances()
      QuestradeApi::REST::Balance.fetch(authorization, )
    end

    def executions(, params = {})
      QuestradeApi::REST::Execution.fetch(authorization, , params)
    end

    def activities(, params = {})
      QuestradeApi::REST::Activity.fetch(authorization, , params)
    end

    def orders(, params = {})
      QuestradeApi::REST::Order.fetch(authorization, , params)
    end
  end
end