syntax = "proto3";

import "google/protobuf/empty.proto";
import "types/types.proto";

option go_package = "./downloader;downloader";

package downloader;

service Downloader {
  rpc Download (DownloadRequest) returns (google.protobuf.Empty) {}
  rpc Verify (VerifyRequest) returns (google.protobuf.Empty) {}
  rpc Stats (StatsRequest) returns (StatsReply) {}
}

// DownloadItem:
// - if Erigon created new snapshot and want seed it
// - if Erigon wnat download files - it fills only "torrent_hash" field
message DownloadItem {
  string path = 1;
  types.H160 torrent_hash = 2; // will be resolved as magnet link
}
message DownloadRequest {
  repeated DownloadItem items = 1; // single hash will be resolved as magnet link
}

message VerifyRequest {
}


message StatsRequest {
}

message StatsReply {
  // First step on startup - "resolve metadata":
  //   - understand total amount of data to download
  //   - ensure all pieces hashes available
  //   - validate files after crush
  //   - when all metadata ready - can start download/upload
  int32  metadataReady = 1;
  int32 filesTotal = 2;

  int32 peersUnique = 4;
  uint64 connectionsTotal = 5;

  bool completed = 6;
  float progress = 7;

  uint64 bytesCompleted = 8;
  uint64 bytesTotal = 9;
  uint64 uploadRate = 10; // bytes/sec
  uint64 downloadRate = 11; // bytes/sec
}
