package logic

import (
	"encoding/json"
	"fusenapi/constants"
	"fusenapi/utils/auth"
	"fusenapi/utils/websocket_data"
	"github.com/gorilla/websocket"
	"time"
)

// 获取唯一标识失败通知
func (l *DataTransferLogic) sendGetUniqueIdErrResponse(conn *websocket.Conn, debug *auth.Debug) {
	rsp := websocket_data.DataTransferData{
		T:     constants.WEBSOCKET_CONNECT_ERR,
		D:     websocket_data.ConnectErrMsg{Message: "err to gen unique id "},
		Debug: debug != nil,
	}
	b, _ := json.Marshal(rsp)
	//先发一条正常信息
	_ = conn.WriteMessage(websocket.TextMessage, b)
	//发送关闭信息
	_ = conn.WriteMessage(websocket.CloseMessage, nil)
}

// 鉴权失败通知
func (l *DataTransferLogic) unAuthResponse(conn *websocket.Conn, isFirefoxBrowser bool, errMessage string) {
	rsp := websocket_data.DataTransferData{
		T:     constants.WEBSOCKET_UNAUTH,
		D:     websocket_data.ConnectUnAuth{Message: errMessage},
		Debug: false,
	}
	b, _ := json.Marshal(rsp)
	if isFirefoxBrowser {
		time.Sleep(time.Second * 1) //兼容下火狐(直接发回去收不到第一条消息:有待研究)
	}
	//先发一条正常信息
	_ = conn.WriteMessage(websocket.TextMessage, b)
	//发送关闭信息
	_ = conn.WriteMessage(websocket.CloseMessage, nil)
}

// 通用入口数据格式错误
func (w *wsConnectItem) incomeDataFormatErrResponse(data interface{}) {
	if w.debug == nil {
		return
	}
	w.sendToOutChan(w.respondDataFormat(constants.WEBSOCKET_ERR_DATA_FORMAT, data))
}

// 渲染错误通知
func (w *wsConnectItem) renderErrResponse(requestId, templateTag, taskId, description string, productId, userId, guestId, templateId, modelId, sizeId, elementModelId int64) {
	if w.debug == nil {
		return
	}
	data := make(map[string]interface{})
	data["request_id"] = requestId
	data["description"] = description
	data["template_tag"] = templateTag
	data["product_id"] = productId
	if taskId != "" {
		data["task_id"] = taskId
	}
	if userId >= 0 {
		data["user_id"] = userId
	}
	if guestId >= 0 {
		data["guest_id"] = guestId
	}
	if templateId > 0 {
		data["template_id"] = templateId
	}
	if modelId > 0 {
		data["model_id"] = modelId
	}
	if sizeId > 0 {
		data["size_id"] = sizeId
	}
	if elementModelId > 0 {
		data["element_model_id"] = elementModelId
	}
	w.sendToOutChan(w.respondDataFormat(constants.WEBSOCKET_RENDER_IMAGE_ERR, data))
}