syntax = "proto3";

package devvit.dev_portal.admin;

import "google/protobuf/empty.proto";
import "google/protobuf/timestamp.proto";
import "google/protobuf/wrappers.proto";

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

enum WaitlistStatus {
  PENDING = 0;
  ACCEPTED = 1;
  REJECTED = 2;
  REVOKED = 3;
}

message Submission {
  string id = 1;
  string user_id = 2;
  string user_name = 3;
  string what_to_build = 4;
  string bots_built = 5;
  google.protobuf.Timestamp created_at = 6;
  google.protobuf.Timestamp updated_at = 7;
  WaitlistStatus status = 8;
  int32 accepted_terms_version = 9;
}

message SubmissionsRequest {
  int32 limit = 1;
  google.protobuf.Timestamp after = 2;
  google.protobuf.Timestamp before = 3;
  optional string username = 4;
}

message SubmissionsResponse {
  repeated Submission submissions = 1;
  int32 total_submissions = 2;
  int32 count = 3;
  google.protobuf.Timestamp first = 4;
  google.protobuf.Timestamp last = 5;
}

message SubmissionUpdateRequest {
  string id = 1;
  WaitlistStatus status = 2;
}

message SubmissionUpdateResponse {
  bool success = 1;
  google.protobuf.StringValue message = 2;
}

message SubmissionAddRequest {
  // Thing ID
  optional string user_id = 1;
  // Username
  optional string user_name = 2;
}

message SubmissionAddResponse {
  bool success = 1;
  google.protobuf.StringValue message = 2;
}

service WaitlistAdmin {
  rpc GetSubmissions(SubmissionsRequest) returns (SubmissionsResponse);
  rpc UpdateSubmission(SubmissionUpdateRequest) returns (SubmissionUpdateResponse);
  rpc AddSubmission(SubmissionAddRequest) returns (SubmissionAddResponse);
  rpc ExportAsCSV(google.protobuf.Empty) returns (google.protobuf.StringValue);
}
