class ZuoraConnect::AppInstanceBase

def new_session(session: self.data_lookup, username: self.access_token, password: self.refresh_token)

def new_session(session: self.data_lookup, username: self.access_token, password: self.refresh_token)
  @api_version = (username.include?("@") ? "v1" : "v2")
  @username = username
  @password = password
  @last_refresh = session["#{self.id}::last_refresh"]
  ## DEV MODE TASK DATA MOCKUP
  if ZuoraConnect.configuration.mode != "Production"
    self.options = ZuoraConnect.configuration.dev_mode_options
    ZuoraConnect.configuration.dev_mode_logins.each do |k,v|
      tmp = ZuoraConnect::Login.new(v)
      self.logins[k] = tmp
      self.attr_builder(k, tmp)
    end
    self.mode = ZuoraConnect.configuration.dev_mode_mode
  else
    if session.nil? || (!session.nil? && self.id != session["appInstance"].to_i) || session["#{self.id}::task_data"].blank? || ( session["#{self.id}::last_refresh"].blank? || session["#{self.id}::last_refresh"].to_i < ZuoraConnect.configuration.timeout.ago.to_i )
      Rails.logger.debug("[#{self.id}] REFRESHING - Session Nil") if session.nil?
      Rails.logger.debug("[#{self.id}] REFRESHING - AppInstance ID(#{self.id}) does not match session id(#{session["appInstance"].to_i})") if  (!session.nil? && self.id != session["appInstance"].to_i)
      Rails.logger.debug("[#{self.id}] REFRESHING - Task Data Blank") if session["#{self.id}::task_data"].blank?
      Rails.logger.debug("[#{self.id}] REFRESHING - No Time on Cookie") if session["#{self.id}::last_refresh"].blank?
      Rails.logger.debug("[#{self.id}] REFRESHING - Session Old") if (session["#{self.id}::last_refresh"].blank? || session["#{self.id}::last_refresh"].to_i < ZuoraConnect.configuration.timeout.ago.to_i )
      self.refresh(session)
    else
      Rails.logger.debug("[#{self.id}] REBUILDING")
      build_task(session["#{self.id}::task_data"], session)
    end
  end
  I18n.locale = self.locale
  Time.zone = self.timezone
  @valid = true
  return self
end