// DO NOT DELETE. This is different from the protos in data-api-firehose https://github.snooguts.net/reddit/data-api-firehose/blob/main/protos/devvit/data/api/admin/v1alpha/ and is specific to dev portal

syntax = "proto3";

package devvit.dev_portal.data_api.admin.audit;

import "devvit/data/api/admin/v1alpha/organization.proto";
import "google/protobuf/timestamp.proto";

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

enum AuditLogEventType {
  DATA_SUBSCRIPTION_CREATE = 0;
  DATA_SUBSCRIPTION_UPDATE = 1;
  DATA_SUBSCRIPTION_DELETE = 2;
  DATA_TOKEN_CREATE = 3;
  DATA_TOKEN_REVOKE = 4;
  ORGANIZATION_DELETE = 5;
  ORGANIZATION_UPDATE = 6;
  ORGANIZATION_CREATE = 7;
  USER_CREATE = 8;
  USER_DELETE = 9;
}

message AuditLogEvent {
  string id = 1; // unique identifier for the event
  google.protobuf.Timestamp created_at = 2; // when the event was created
  string user_id = 3; // t2_ id of the user who performed the action
  AuditLogEventType type = 4; // type of the event
  string organization_id = 5; // id of the organization the event is associated with
  oneof payload {
    DataTokenCreateAuditLogEventPayload data_token_create_payload = 6;
    DataTokenRevokeAuditLogEventPayload data_token_revoke_payload = 7;
    DataSubscriptionCreateAuditLogEventPayload data_subscription_create_payload = 8;
    DataSubscriptionUpdateAuditLogEventPayload data_subscription_update_payload = 9;
    DataSubscriptionDeleteAuditLogEventPayload data_subscription_delete_payload = 10;
    OrganizationDeleteAuditLogEventPayload organization_delete_payload = 13;
    OrganizationUpdateAuditLogEventPayload organization_update_payload = 14;
  }
  // username of the user who performed the action without the u/ prefix
  // @example "spez"
  string username = 11;
}

message DataTokenCreateAuditLogEventPayload {
  string token_id = 1; // id of the data token that was created
  google.protobuf.Timestamp expiration = 2; // expiration date of the data token
}

message DataTokenRevokeAuditLogEventPayload {
  string token_id = 1; // id of the data token that was revoked
}

message DataSubscriptionCreateAuditLogEventPayload {
  string subscription_id = 1;
}

message DataSubscriptionUpdateAuditLogEventPayload {
  string subscription_id = 1;
}

message DataSubscriptionDeleteAuditLogEventPayload {
  string subscription_id = 1;
}

message OrganizationDeleteAuditLogEventPayload {
  devvit.data.api.admin.v1alpha.Organization organization = 1;
}

message OrganizationUpdateAuditLogEventPayload {
  devvit.data.api.admin.v1alpha.Organization organization = 1;
}

message GetAuditLogEventsRequest {
  string organization_name = 1;
}

message GetAuditLogEventsResponse {
  repeated AuditLogEvent events = 1;
}
