syntax = "proto3";
package kava.community.v1beta1;

import "cosmos/base/v1beta1/coin.proto";
import "cosmos_proto/cosmos.proto";
import "gogoproto/gogo.proto";
import "google/api/annotations.proto";
import "kava/community/v1beta1/params.proto";

option go_package = "github.com/kava-labs/kava/x/community/types";

// Query defines the gRPC querier service for x/community.
service Query {
  // Params queires the module params.
  rpc Params(QueryParamsRequest) returns (QueryParamsResponse) {
    option (google.api.http).get = "/kava/community/v1beta1/params";
  }

  // Balance queries the balance of all coins of x/community module.
  rpc Balance(QueryBalanceRequest) returns (QueryBalanceResponse) {
    option (google.api.http).get = "/kava/community/v1beta1/balance";
  }

  // TotalBalance queries the balance of all coins, including x/distribution,
  // x/community, and supplied balances.
  rpc TotalBalance(QueryTotalBalanceRequest) returns (QueryTotalBalanceResponse) {
    option (google.api.http).get = "/kava/community/v1beta1/total_balance";
  }

  // AnnualizedRewards calculates and returns the current annualized reward percentages,
  // like staking rewards, for the chain.
  rpc AnnualizedRewards(QueryAnnualizedRewardsRequest) returns (QueryAnnualizedRewardsResponse) {
    option (google.api.http).get = "/kava/community/v1beta1/annualized_rewards";
  }
}

// QueryParams defines the request type for querying x/community params.
message QueryParamsRequest {}

// QueryParamsResponse defines the response type for querying x/community params.
message QueryParamsResponse {
  // params represents the community module parameters
  Params params = 1 [(gogoproto.nullable) = false];
}

// QueryBalanceRequest defines the request type for querying x/community balance.
message QueryBalanceRequest {}

// QueryBalanceResponse defines the response type for querying x/community balance.
message QueryBalanceResponse {
  repeated cosmos.base.v1beta1.Coin coins = 1 [
    (gogoproto.nullable) = false,
    (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"
  ];
}

// QueryTotalBalanceRequest defines the request type for querying total community pool balance.
message QueryTotalBalanceRequest {}

// QueryTotalBalanceResponse defines the response type for querying total
// community pool balance. This matches the x/distribution CommunityPool query response.
message QueryTotalBalanceResponse {
  // pool defines community pool's coins.
  repeated cosmos.base.v1beta1.DecCoin pool = 1 [
    (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins",
    (gogoproto.nullable) = false
  ];
}

// QueryAnnualizedRewardsRequest defines the request type for querying the annualized rewards.
message QueryAnnualizedRewardsRequest {}

// QueryAnnualizedRewardsResponse defines the response type for querying the annualized rewards.
message QueryAnnualizedRewardsResponse {
  // staking_rewards is the calculated annualized staking rewards percentage rate
  string staking_rewards = 1 [
    (cosmos_proto.scalar) = "cosmos.Dec",
    (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec",
    (gogoproto.nullable) = false
  ];
}
