syntax = "proto3";

package coda.admin.v1;

option java_package = "coda.admin.v1";
option java_outer_classname = "TenantProto";

import "coda/admin/v1/types.proto";
import "coda/common/v1/types.proto";

service TenantService {
  // Create a new tenant.
  rpc CreateTenant(CreateTenantRequest) returns (TenantInfo);

  // Get a tenant by ID.
  rpc GetTenant(GetTenantRequest) returns (TenantInfo);

  // Update a tenant's mutable fields.
  rpc UpdateTenant(UpdateTenantRequest) returns (TenantInfo);

  // List tenants with optional status filter.
  rpc ListTenants(ListTenantsRequest) returns (ListTenantsResponse);

  // Suspend a tenant (blocks all user access).
  rpc SuspendTenant(SuspendTenantRequest) returns (TenantInfo);

  // Reactivate a previously suspended tenant.
  rpc ReactivateTenant(ReactivateTenantRequest) returns (TenantInfo);
}

// ─── CreateTenant ────────────────────────────────────────────────────

message CreateTenantRequest {
  string name = 1;
  string slug = 2;
  string plan_id = 3;
  string primary_jurisdiction = 4;
  string data_residency = 5;
}

// ─── GetTenant ───────────────────────────────────────────────────────

message GetTenantRequest {
  string tenant_id = 1;
}

// ─── UpdateTenant ────────────────────────────────────────────────────

message UpdateTenantRequest {
  string tenant_id = 1;
  optional string name = 2;
  optional string display_name = 3;
  optional string logo_url = 4;
  optional string plan_id = 5;
}

// ─── ListTenants ─────────────────────────────────────────────────────

message ListTenantsRequest {
  coda.common.v1.PageRequest page = 1;
  TenantStatus status = 2;
}

message ListTenantsResponse {
  repeated TenantInfo tenants = 1;
  coda.common.v1.PageInfo page = 2;
}

// ─── SuspendTenant ───────────────────────────────────────────────────

message SuspendTenantRequest {
  string tenant_id = 1;
  string reason = 2;
}

// ─── ReactivateTenant ────────────────────────────────────────────────

message ReactivateTenantRequest {
  string tenant_id = 1;
}
