syntax = "proto3";

package permission.v1;

// Opsi go_package ini sangat penting.
// Path harus relatif terhadap root modul (tanpa nama modul "service-general").
// Nama paket eksplisit (permissionV1) ditambahkan setelah titik koma.
option go_package = "internal/infrastructure/transport/grpc/gen/permission/v1;permissionV1";

import "google/protobuf/wrappers.proto";

// Definisi service.
service RolPermissionService {
  // Mengambil permission tree untuk role dan/atau group tertentu.
  rpc GetRolePermissionTree(GetRolePermissionTreeRequest) returns (RolePermissionTreeResponse);
}

// Pesan request untuk RPC GetRolePermissionTree.
message GetRolePermissionTreeRequest {
  string role_keycloak = 1;
  repeated string group_keycloak = 2;
  // Menggunakan wrapper BoolValue untuk membedakan antara 'false' dan 'tidak diset'.
  google.protobuf.BoolValue active_only = 3;
}

// Pesan response untuk RPC GetRolePermissionTree.
message RolePermissionTreeResponse {
  bool success = 1;
  RolePermissionData data = 2;
}

message RolePermissionData {
  string role = 1;
  repeated string group = 2;
  repeated AccessTreeItem access = 3;
}

message AccessTreeItem {
  int64 id = 1;
  string name = 2;
  string icon = 3;
  string url = 4;
  int32 level = 5;
  int32 sort = 6;
  bool active = 7;
  optional Permission permission = 8;
  repeated AccessTreeItem children = 9;
}

message Permission {
  bool create = 1;
  bool read = 2;
  bool update = 3;
  bool delete = 4;
  bool disable = 5;
}