package channel

import (
	"context"
	"git.oa00.com/supply-chain/service/client"
	"github.com/smallnest/rpcx/share"
)

const (
	MqSubscribeNameSkuPriceChange = "sku_price_change" // sku价格变动
	MqSubscribeNameSkuChange      = "sku_change"       // sku信息变动
	MqSubscribeNameOrderSplit     = "order_split"      // 订单拆单
	MqSubscribeNameOrderStockOut  = "order_stock_out"  // 订单出库
	MqSubscribeNameOrderFinish    = "order_finish"     // 订单完成
	MqSubscribeNameOrderCancel    = "order_cancel"     // 订单取消
)

type mq struct {
}
type ArgsMqSubscribe struct {
	Name   string // 队列名称
	AppKey string // 队列名称
}

// Subscribe @Title 订阅mq
func (m *mq) Subscribe(ctx context.Context, channelId string, args ArgsMqSubscribe) (key string, err error) {
	xClient, err := client.GetClient(m)
	if err != nil {
		return
	}
	err = xClient.Call(context.WithValue(ctx, share.ReqMetaDataKey, map[string]string{"channelId": channelId}), "Subscribe", args, &key)
	return
}

// SubscribeCancel @Title 订阅取消
func (m *mq) SubscribeCancel(ctx context.Context, channelId string, args ArgsMqSubscribe) (err error) {
	reply := 0
	xClient, err := client.GetClient(m)
	if err != nil {
		return
	}
	err = xClient.Call(context.WithValue(ctx, share.ReqMetaDataKey, map[string]string{"channelId": channelId}), "SubscribeCancel", args, &reply)
	return
}

type ArgsMqUser struct {
	AppKey    string
	AppSecret string
}

// User @Title Mq用户
func (m *mq) User(ctx context.Context, channelId string, args ArgsMqUser) (err error) {
	reply := 0
	xClient, err := client.GetClient(m)
	if err != nil {
		return
	}
	err = xClient.Call(context.WithValue(ctx, share.ReqMetaDataKey, map[string]string{"channelId": channelId}), "User", args, &reply)
	return
}