// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2

package wallet

import (
	"context"

	"juwan-backend/app/wallet/rpc/pb"
	"juwan-backend/common/utils/contextj"

	"juwan-backend/app/wallet/api/internal/svc"
	"juwan-backend/app/wallet/api/internal/types"

	"github.com/zeromicro/go-zero/core/logx"
)

type GetBalanceLogic struct {
	logx.Logger
	ctx    context.Context
	svcCtx *svc.ServiceContext
}

// 获取余额
func NewGetBalanceLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetBalanceLogic {
	return &GetBalanceLogic{
		Logger: logx.WithContext(ctx),
		ctx:    ctx,
		svcCtx: svcCtx,
	}
}

func (l *GetBalanceLogic) GetBalance(req *types.EmptyResp) (resp *types.WalletBalance, err error) {
	userID, err := contextj.UserIDFrom(l.ctx)
	if err != nil {
		return nil, err
	}

	out, err := l.svcCtx.WalletRpc.GetWalletsById(l.ctx, &pb.GetWalletsByIdReq{Id: userID})
	if err != nil {
		return nil, err
	}

	if out.GetWallets() == nil {
		return &types.WalletBalance{Balance: "0", FrozenBalance: "0"}, nil
	}

	return &types.WalletBalance{
		Balance:       out.Wallets.Balance,
		FrozenBalance: out.Wallets.FrozenBalance,
	}, nil
}
