syntax = "proto3";
package cloud;
option go_package = "bsm/full/module/base/cloud/pb;cloud";
import "module/base/cloud/proto/const.proto";

// 云盘目录服务
service Disk {
  // 创建目录
  rpc CreateDir(CreateDirRequest) returns (base_cloud_blocks.StatusReply);
  // 获取目录详情
  rpc GetDir(base_cloud_blocks.IdentRequest) returns (CloudDiskDirItem);
  // 更新目录
  rpc UpdateDir(CloudDiskDirItem) returns (base_cloud_blocks.StatusReply);
  // 删除目录
  rpc DeleteDir(base_cloud_blocks.IdentRequest) returns (base_cloud_blocks.StatusReply);
  // 获取目录列表
  rpc ListDirs(base_cloud_blocks.FetchRequest) returns (ListDirsResponse);
  // 获取目录树
  rpc GetDirTree(base_cloud_blocks.IdentRequest) returns (CloudDiskDirItem);
  // 移动目录
  rpc MoveDir(MoveDirRequest) returns (base_cloud_blocks.StatusReply);

  // 上传文件
  rpc UploadFile(CloudDiskFileRequest) returns (base_cloud_blocks.StatusReply);
  // 获取文件详情
  rpc GetFile(base_cloud_blocks.IdentRequest) returns (CloudDiskFileItem);
  // 更新文件
  rpc UpdateFile(CloudDiskFileItem) returns (base_cloud_blocks.StatusReply);
  // 删除文件
  rpc DeleteFile(base_cloud_blocks.IdentRequest) returns (base_cloud_blocks.StatusReply);
  // 获取文件列表
  rpc ListFiles(base_cloud_blocks.FetchRequest) returns (ListFilesResponse);
  // 移动文件
  rpc MoveFile(MoveFileRequest) returns (base_cloud_blocks.StatusReply);
  // 复制文件
  rpc CopyFile(CopyFileRequest) returns (base_cloud_blocks.StatusReply);
  // 搜索文件
  rpc SearchFiles(base_cloud_blocks.FetchRequest) returns (ListFilesResponse);
}

message CreateDirRequest {
  uint64 cloud_id = 1;
  string cloud_identity = 2;
  uint64 parent_id = 3;               // 支持嵌套目录
  string name = 4;                    // 目录名称
  string path = 5;                    // 完整路径
}

// 请求消息定义
message ListDirsResponse {
  repeated CloudDiskDirItem dirs = 1;
  int64 total = 2;
}

// 云盘目录模型
message CloudDiskDirItem {
  uint64 id = 1;
  string identity = 2;
  uint64 parent_id = 3;               // 支持嵌套目录
  string name = 4;                    // 目录名称
  string path = 5;                    // 完整路径
  string created_at = 6;
  string updated_at = 7;

  // 自关联
  CloudDiskDirItem parent = 8;            // 父级目录
  repeated CloudDiskDirItem subdirectories = 9; // 子级目录
  repeated CloudDiskFileItem files = 10;   // 文件
}


message MoveDirRequest {
  uint64 id = 1;
  uint64 new_parent_id = 2;
}


message ListFilesResponse {
  repeated CloudDiskFileItem files = 1;
  int64 total = 2;
}

message MoveFileRequest {
  uint64 id = 1;
  uint64 new_directory_id = 2;
}

message CopyFileRequest {
  uint64 id = 1;
  uint64 target_directory_id = 2;
  string new_name = 3;
}

message CloudDiskFileRequest {
  uint64 cloud_id = 1;
  string cloud_identity = 2;
  uint64 directory_id = 3;            // 文件所属目录
  string name = 4;                    // 文件名
  string original_name = 5;           // 原始文件名
  int64 size = 6;                     // 文件大小 (bytes)
  string mime_type = 7;               // 文件类型
  string storage_path = 8;            // 实际存储路径
  string hash = 9;                    // 文件哈希，用于去重
}

// 云盘文件
message CloudDiskFileItem {
  uint64 id = 1;
  string identity = 2;
  uint64 directory_id = 3;            // 文件所属目录
  string name = 4;                    // 文件名
  string original_name = 5;           // 原始文件名
  int64 size = 6;                     // 文件大小 (bytes)
  string mime_type = 7;               // 文件类型
  string storage_path = 8;            // 实际存储路径
  string hash = 9;                    // 文件哈希，用于去重
  string created_at = 10;
  string updated_at = 11;

  // 关联关系
  CloudDiskDirItem directory = 12;        // 文件所属目录
}
