syntax = "proto3";
package osmosis.txfees.v1beta1;

import "gogoproto/gogo.proto";
import "google/api/annotations.proto";
import "google/protobuf/duration.proto";

import "osmosis/txfees/v1beta1/feetoken.proto";

option go_package = "github.com/osmosis-labs/osmosis/v13/x/txfees/types";

service Query {
  // FeeTokens returns a list of all the whitelisted fee tokens and their
  // corresponding pools. It does not include the BaseDenom, which has its own
  // query endpoint
  rpc FeeTokens(QueryFeeTokensRequest) returns (QueryFeeTokensResponse) {
    option (google.api.http).get = "/osmosis/txfees/v1beta1/fee_tokens";
  }

  // DenomSpotPrice returns all spot prices by each registered token denom.
  rpc DenomSpotPrice(QueryDenomSpotPriceRequest)
      returns (QueryDenomSpotPriceResponse) {
    option (google.api.http).get =
        "/osmosis/txfees/v1beta1/spot_price_by_denom";
  }

  // Returns the poolID for a specified denom input.
  rpc DenomPoolId(QueryDenomPoolIdRequest) returns (QueryDenomPoolIdResponse) {
    option (google.api.http).get =
        "/osmosis/txfees/v1beta1/denom_pool_id/{denom}";
  }

  // Returns a list of all base denom tokens and their corresponding pools.
  rpc BaseDenom(QueryBaseDenomRequest) returns (QueryBaseDenomResponse) {
    option (google.api.http).get = "/osmosis/txfees/v1beta1/base_denom";
  }
}

message QueryFeeTokensRequest {}
message QueryFeeTokensResponse {
  repeated FeeToken fee_tokens = 1 [
    (gogoproto.moretags) = "yaml:\"fee_tokens\"",
    (gogoproto.nullable) = false
  ];
}

// QueryDenomSpotPriceRequest defines grpc request structure for querying spot
// price for the specified tx fee denom
message QueryDenomSpotPriceRequest {
  string denom = 1 [ (gogoproto.moretags) = "yaml:\"denom\"" ];
}

// QueryDenomSpotPriceRequest defines grpc response structure for querying spot
// price for the specified tx fee denom
message QueryDenomSpotPriceResponse {
  uint64 poolID = 1 [ (gogoproto.moretags) = "yaml:\"pool_id\"" ];
  string spot_price = 2 [
    (gogoproto.moretags) = "yaml:\"spot_price\"",
    (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec",
    (gogoproto.nullable) = false
  ];
}

message QueryDenomPoolIdRequest {
  string denom = 1 [ (gogoproto.moretags) = "yaml:\"denom\"" ];
}
message QueryDenomPoolIdResponse {
  uint64 poolID = 1 [ (gogoproto.moretags) = "yaml:\"pool_id\"" ];
}

message QueryBaseDenomRequest {}
message QueryBaseDenomResponse {
  string base_denom = 1 [ (gogoproto.moretags) = "yaml:\"base_denom\"" ];
}
