class ZuoraConnect::AppInstance

def self.decrypt_response(resp)

def self.decrypt_response(resp)
  OpenSSL::PKey::RSA.new(ZuoraConnect.configuration.private_key).private_decrypt(resp)
end

def attr_builder(field,val)

def attr_builder(field,val)
  singleton_class.class_eval { attr_accessor "#{field}" }
  send("#{field}=", val)
end

def build_task(task_data, session)

def build_task(task_data, session)
  @task_data = task_data
  @mode = @task_data["mode"]
  @task_data.each do |k,v|
    if k.match(/^(.*)_login$/)
      tmp = ZuoraConnect::Login.new(v)
      tmp.client.current_session = session["#{self.id}::#{k}:session"] if !session.nil? && v["tenant_type"] == "Zuora" && session["#{self.id}::#{k}:session"]
      @logins[k] = tmp
      self.attr_builder(k, @logins[k])
    elsif k == "options"
      v.each do |opt|
        @options[opt["config_name"]] = opt
      end
    end
  end
end

def init

def init
  @options = Hash.new
  @logins = Hash.new
  Apartment::Migrator.migrate(self.id)
  Apartment::Tenant.switch!(self.id)
end

def new_session(user, password, session = nil)

def new_session(user, password, session = nil)
  @user = user
  @pass = password
  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("REFRESHING - Session Nil") if session.nil?
    Rails.logger.debug("REFRESHING - AppInstance ID does not match session id") if  (!session.nil? && self.id != session["appInstance"].to_i)
    Rails.logger.debug("REFRESHING - Task Data Blank") if session["#{self.id}::task_data"].blank?
    Rails.logger.debug("REFRESHING - No Time on Cookie") if session["#{self.id}::last_refresh"].blank?
    Rails.logger.debug("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("REBUILDING")
    build_task(session["#{self.id}::task_data"], session)
  end
  @valid = true
end

def refresh(session = nil)

def refresh(session = nil)
  response = HTTParty.get(ZuoraConnect.configuration.url + "/api/v1/tools/tasks/#{self.id}.json",:basic_auth => auth = {:username => self.user, :password => self.pass})
  if response.code == 200
    @last_refresh = Time.now.to_i
    build_task(JSON.parse(response.body), session)
  else
    raise "Unauthorized"
  end
end

def save_data(session = Hash.new)

def save_data(session = Hash.new)
  self.logins.each do |key, login|
    if login.tenant_type == "Zuora"
      session["#{self.id}::#{key}:session"] = login.client.current_session
    end
  end
  session["#{self.id}::task_data"] = self.task_data
  session["#{self.id}::last_refresh"] = self.last_refresh
  session["appInstance"] = self.id
  return session
end

def send_email

def send_email
end

def updateOption(optionId, value)

def updateOption(optionId, value)
  if @user && @pass
    return HTTParty.get(ZuoraConnect.configuration.url + "/api/v1/tools/application_options/#{optionId}/edit?value=#{value}",:basic_auth => auth = {:username => user, :password => password})
  else
    return false
  end
end