docs: def _MapLegacyArgs(nt, message, ref):
    """Maps UserNotification object to legacy GRRUser.Notify arguments."""
    unt = rdf_objects.UserNotification.Type
  
    if nt == unt.TYPE_CLIENT_INTERROGATED:
      return [
          "Discovery",
          aff4.ROOT_URN.Add(ref.client.client_id),
          _HostPrefix(ref.client.client_id) + message,
          "",
      ]
    elif nt == unt.TYPE_CLIENT_APPROVAL_REQUESTED:
      return [
          "GrantAccess",
          aff4.ROOT_URN.Add("ACL").Add(ref.approval_request.subject_id).Add(
              ref.approval_request.requestor_username).Add(
                  ref.approval_request.approval_id),
          message,
          "",
      ]
    elif nt == unt.TYPE_HUNT_APPROVAL_REQUESTED:
      return [
          "GrantAccess",
          aff4.ROOT_URN.Add("ACL").Add("hunts").Add(
              ref.approval_request.subject_id).Add(
                  ref.approval_request.requestor_username).Add(
                      ref.approval_request.approval_id),
          message,
          "",
      ]
    elif nt == unt.TYPE_CRON_JOB_APPROVAL_REQUESTED:
      return [
          "GrantAccess",
          aff4.ROOT_URN.Add("ACL").Add("cron").Add(
              ref.approval_request.subject_id).Add(
                  ref.approval_request.requestor_username).Add(
                      ref.approval_request.approval_id),
          message,
          "",
      ]
    elif nt == unt.TYPE_CLIENT_APPROVAL_GRANTED:
      return [
          "ViewObject",
          aff4.ROOT_URN.Add(ref.client.client_id),
          message,
          "",
      ]
    elif nt == unt.TYPE_HUNT_APPROVAL_GRANTED:
      return [
          "ViewObject",
          aff4.ROOT_URN.Add("hunts").Add(ref.hunt.hunt_id),
          message,
          "",
      ]
    elif nt == unt.TYPE_CRON_JOB_APPROVAL_GRANTED:
      return [
          "ViewObject",
          aff4.ROOT_URN.Add("cron").Add(ref.cron_job.cron_job_id),
          message,
          "",
      ]
    elif nt == unt.TYPE_VFS_FILE_COLLECTED:
      return [
          "ViewObject",
          ref.vfs_file.ToURN(),
          _HostPrefix(ref.vfs_file.client_id) + message,
          "",
      ]
    elif nt == unt.TYPE_VFS_FILE_COLLECTION_FAILED:
      return [
          "ViewObject",
          ref.vfs_file.ToURN(),
          _HostPrefix(ref.vfs_file.client_id) + message,
          "",
      ]
    elif nt == unt.TYPE_HUNT_STOPPED:
      urn = aff4.ROOT_URN.Add("hunts").Add(ref.hunt.hunt_id)
      return [
          "ViewObject",
          urn,
          message,
          urn,
      ]
    elif nt == unt.TYPE_FILE_ARCHIVE_GENERATED:
      return [
          "ArchiveGenerationFinished",
          None,
          message,
          "",
      ]
    elif nt == unt.TYPE_FILE_ARCHIVE_GENERATION_FAILED:
      return [
          "Error",
          None,
          message,
          "",
      ]
    elif nt == unt.TYPE_FLOW_RUN_COMPLETED:
      urn = None
      if ref.flow and ref.flow.client_id and ref.flow.flow_id:
        urn = aff4.ROOT_URN.Add(ref.flow.client_id).Add("flows").Add(
            ref.flow.flow_id)
      return [
          "ViewObject",
          urn,
          _HostPrefix(ref.flow.client_id) + message,
          "",
      ]
    elif nt == unt.TYPE_FLOW_RUN_FAILED:
      client_id = None
      urn = None
      prefix = ""
      if ref.flow is not None:
        client_id = ref.flow.client_id
  
        if client_id:
          prefix = _HostPrefix(client_id)
  
          if ref.flow.flow_id:
            urn = aff4.ROOT_URN.Add(ref.flow.client_id).Add("flows").Add(
                ref.flow.flow_id)
  
      return [
          "FlowStatus",
          client_id,
          prefix + message,
          urn,
      ]
    elif nt == unt.TYPE_VFS_LIST_DIRECTORY_COMPLETED:
      return [
          "ViewObject",
          ref.vfs_file.ToURN(),
          message,
          "",
      ]
    elif nt == unt.TYPE_VFS_RECURSIVE_LIST_DIRECTORY_COMPLETED:
      return [
          "ViewObject",
          ref.vfs_file.ToURN(),
          message,
          "",
      ]
    else:
      raise NotImplementedError()