package core

import "github.com/goWxHook/goWxHook/utils/json"

type LiveEnterRequest struct {
	ObjectId      string `json:"object_id"`
	LiveId        string `json:"live_id"`
	ObjectNonceId string `json:"object_nonce_id"`
}

// LiveEnter 进入直播间
func (w *WxApi) LiveEnter(request LiveEnterRequest) error {
	_, err := w.internalCall(0, -1, MtLiveEnterMsg, request, nil)
	return err
}

type LiveGetOnlineUserRequest struct {
	ObjectId      string `json:"object_id"`
	LiveId        string `json:"live_id"`
	ObjectNonceId string `json:"object_nonce_id"`
	LastBuff      string `json:"last_buff"`
}

type LiveGetOnlineUserResponse struct {
	Data interface{} `json:"data"`
	Type int         `json:"type"`
}

// LiveGetOnlineUser 获取直播间在线用户
func (w *WxApi) LiveGetOnlineUser(request LiveGetOnlineUserRequest) (interface{}, error) {
	resp, err := w.internalCall(MtLiveGetOnlineUserMsg, 60, MtLiveGetOnlineUserMsg, request, nil)
	if err != nil {
		return nil, err
	}
	var rdata LiveGetOnlineUserResponse
	err = json.Unmarshal([]byte(resp), &rdata)
	if err != nil {
		return nil, WxError{-1, err.Error()}
	}
	return rdata.Data, nil
}

type LiveGetChangeInfoResponse struct {
	Data interface{} `json:"data"`
	Type int         `json:"type"`
}

// LiveGetChangeInfo 获取直播间变动信息(人气，实时发言等))
func (w *WxApi) LiveGetChangeInfo() (interface{}, error) {
	resp, err := w.internalCall(MtLiveGetChangeInfoMsg, 60, MtLiveGetChangeInfoMsg, map[string]interface{}{}, nil)
	if err != nil {
		return nil, err
	}
	var rdata LiveGetChangeInfoResponse
	err = json.Unmarshal([]byte(resp), &rdata)
	if err != nil {
		return nil, WxError{-1, err.Error()}
	}
	return rdata.Data, nil
}

type LiveSendMsgRequest struct {
	Content string `json:"content"`
}

// LiveSendMsg 发送直播间消息
func (w *WxApi) LiveSendMsg(request LiveSendMsgRequest) error {
	_, err := w.internalCall(0, -1, MtLiveSendMsg, request, nil)
	return err
}

type LiveGetShelfRequest struct {
	LiveUsername string `json:"live_username"`
	RequestId    string `json:"request_id"`
}

type LiveGetShelfResponse struct {
	Data interface{} `json:"data"`
	Type int         `json:"type"`
}

// LiveGetShelf 获取直播间货架
func (w *WxApi) LiveGetShelf(request LiveGetShelfRequest) (interface{}, error) {
	resp, err := w.internalCall(MtLiveGetShelfMsg, 60, MtLiveGetShelfMsg, request, nil)
	if err != nil {
		return nil, err
	}
	var rdata LiveGetShelfResponse
	err = json.Unmarshal([]byte(resp), &rdata)
	if err != nil {
		return nil, WxError{-1, err.Error()}
	}
	return rdata.Data, nil
}
