syntax = "proto3";

package devvit.remote_logger;

import "devvit/plugin/logger/logger.proto";
import "google/protobuf/timestamp.proto";

option go_package = "github.snooguts.net/reddit/reddit-devplatform-monorepo/go-common/generated/protos/types/devvit/remote_logger";

service RemoteLogPublisher {
  rpc Put(RemoteLogMessage) returns (RemoteLogPutResponse);
  rpc PutAll(RemoteLogMessages) returns (RemoteLogPutResponse);
}

service RemoteLogConsumer {
  rpc Tail(RemoteLogQuery) returns (stream RemoteLogMessage);
}

message RemoteLogMessages {
  repeated RemoteLogMessage messages = 1;
}

message RemoteLogPutResponse {}

message KeepAliveMessage {
  google.protobuf.Timestamp timestamp = 1;
}

message RemoteLogMessage {
  oneof message {
    devvit.plugin.logger.LogMessage log = 1;
    devvit.plugin.logger.LogErrorMessage error = 2;
    KeepAliveMessage keepalive = 3;
    devvit.plugin.logger.LogEventMessage event = 4;
  }
}

enum RemoteLogType {
  LOG = 0;
  ERROR = 1;
  EVENT = 2;
}

// Filter on installation ID (encoded subreddit name AND app name).
message RemoteLogInstallationFilter {
  string installation_id = 1;
}

// Filter on subreddit name and / or app name. Not all combinations are
// available on all streams.
message RemoteLogSubredditAppNameFilter {
  string subreddit = 2;
  string app_name = 3;
}

message RemoteLogQuery {
  // Not all filters are available on all log streams.
  oneof filter {
    RemoteLogInstallationFilter installation = 1;
    RemoteLogSubredditAppNameFilter subreddit_app_name = 2;
  }

  RemoteLogType type = 3;
  google.protobuf.Timestamp since = 4;
}
