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

import "cosmos/base/v1beta1/coin.proto";
import "cosmos_proto/cosmos.proto";
import "gogoproto/gogo.proto";
import "google/protobuf/timestamp.proto";

option go_package = "github.com/kava-labs/kava/x/cdp/types";
option (gogoproto.goproto_getters_all) = false;

// CDP defines the state of a single collateralized debt position.
message CDP {
  uint64 id = 1 [(gogoproto.customname) = "ID"];
  bytes owner = 2 [
    (cosmos_proto.scalar) = "cosmos.AddressBytes",
    (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.AccAddress"
  ];
  string type = 3;
  cosmos.base.v1beta1.Coin collateral = 4 [(gogoproto.nullable) = false];
  cosmos.base.v1beta1.Coin principal = 5 [(gogoproto.nullable) = false];
  cosmos.base.v1beta1.Coin accumulated_fees = 6 [(gogoproto.nullable) = false];
  google.protobuf.Timestamp fees_updated = 7 [
    (gogoproto.stdtime) = true,
    (gogoproto.nullable) = false
  ];
  string interest_factor = 8 [
    (cosmos_proto.scalar) = "cosmos.Dec",
    (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec",
    (gogoproto.nullable) = false
  ];
}

// Deposit defines an amount of coins deposited by an account to a cdp
message Deposit {
  uint64 cdp_id = 1 [(gogoproto.customname) = "CdpID"];
  string depositor = 2 [
    (cosmos_proto.scalar) = "cosmos.AddressBytes",
    (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.AccAddress"
  ];
  cosmos.base.v1beta1.Coin amount = 3 [(gogoproto.nullable) = false];
}

// TotalPrincipal defines the total principal of a given collateral type
message TotalPrincipal {
  string collateral_type = 1;
  cosmos.base.v1beta1.Coin amount = 2 [(gogoproto.nullable) = false];
}

// TotalCollateral defines the total collateral of a given collateral type
message TotalCollateral {
  string collateral_type = 1;
  cosmos.base.v1beta1.Coin amount = 2 [(gogoproto.nullable) = false];
}

// OwnerCDPIndex defines the cdp ids for a single cdp owner
message OwnerCDPIndex {
  repeated uint64 cdp_ids = 1 [(gogoproto.customname) = "CdpIDs"];
}
