syntax = "proto3";

option csharp_namespace = "EllieBot.GrpcApi";

import "google/protobuf/empty.proto";

package other;

service GrpcOther {
  rpc BotOnGuild(BotOnGuildRequest) returns (BotOnGuildReply);
  rpc GetTextChannels(GetTextChannelsRequest) returns (GetTextChannelsReply);
  rpc GetRoles(GetRolesRequest) returns (GetRolesReply);

  rpc GetCurrencyLb(GetLbRequest) returns (CurrencyLbReply);
  rpc GetXpLb(GetLbRequest) returns (XpLbReply);
  rpc GetWaifuLb(GetLbRequest) returns (WaifuLbReply);

  rpc GetShardStats(google.protobuf.Empty) returns (stream ShardStatsReply);
  rpc GetCommandFeed(google.protobuf.Empty) returns (stream CommandFeedEntry);
  rpc GetServerInfo(ServerInfoRequest) returns (GetServerInfoReply);
}

message CommandFeedEntry {
  string command = 1;
}

message GetRolesRequest {
  uint64 guildId = 1;
}

message GetRolesReply {
  repeated RoleReply roles = 1;
}

message BotOnGuildRequest {
  uint64 guildId = 1;
}

message BotOnGuildReply {
  bool success = 1;
}

message ShardStatsReply {
  int32 id = 1;
  string status = 2;

  int32 guildCount = 3;
  string uptime = 4;
  int64 commands = 5;
}

message GetTextChannelsRequest{
  uint64 guildId = 1;
}

message GetTextChannelsReply {
  repeated TextChannelReply textChannels = 1;
}

message TextChannelReply {
  uint64 id = 1;
  string name = 2;
}

message CurrencyLbReply {
  repeated CurrencyLbEntryReply entries = 1;
}

message CurrencyLbEntryReply {
  string user = 1;
  uint64 userId = 2;
  int64 amount = 3;
  string avatar = 4;
}

message GetLbRequest {
  int32 page = 1;
  int32 perPage = 2;
}

message XpLbReply {
  repeated XpLbEntryReply entries = 1;
}

message XpLbEntryReply {
  string user = 1;
  uint64 userId = 2;
  int64 totalXp = 3;
  int64 level = 4;
}

message WaifuLbReply {
  repeated WaifuLbEntry entries = 1;
}

message WaifuLbEntry {
  string user = 1;
  string claimedBy = 2;
  int64 value = 3;
  bool isMutual = 4;
}

message ServerInfoRequest {
  uint64 guildId = 1;
}

message GetServerInfoReply {
  uint64 id = 1;
  string name = 2;
  string iconUrl = 3;
  uint64 ownerId = 4;
  string ownerName = 5;
  repeated RoleReply roles = 6;
  repeated EmojiReply emojis = 7;
  repeated string features = 8;
  int32 textChannels = 9;
  int32 voiceChannels = 10;
  int32 memberCount = 11;
  int64 createdAt = 12;
}

message RoleReply {
  uint64 id = 1;
  string name = 2;
  string iconUrl = 3;
  string color = 4;
}

message EmojiReply {
  string name = 1;
  string url = 2;
  string code = 3;
}

message ChannelReply {
  uint64 id = 1;
  string name = 2;
  ChannelType type = 3;
}

enum ChannelType {
  Text = 0;
  Voice = 1;
}