let Disp = require("./Dispatcher.js");
let msgPackager = require("./msgpackager.js");
let msgType = require("./msgtype.js");
let msgStorage = new Disp();
let disp = require("./broadcast.js");
msgStorage.saveReceiveMsg = function (receiveMsg, type) {
    let sendableMsg;
    if (type == msgType.IMAGE) {
        sendableMsg = {
            id: receiveMsg.id,
            type: type,
            body: {
                id: receiveMsg.id,
                from: receiveMsg.from,
                to: receiveMsg.to,
                type: receiveMsg.type,
                ext: receiveMsg.ext,
                chatType: receiveMsg.type,
                toJid: "",
                body: {
                    type: type,
                    url: receiveMsg.url,
                    filename: receiveMsg.filename,
                    filetype: receiveMsg.filetype,
                    size: {
                        width: receiveMsg.width,
                        height: receiveMsg.height
                    },
                },
            },
        };
    }
    else if (type == msgType.TEXT || type == msgType.EMOJI) {
        sendableMsg = {
            id: receiveMsg.id,
            type: type,
            body: {
                id: receiveMsg.id,
                from: receiveMsg.from,
                to: receiveMsg.to,
                type: receiveMsg.type,
                ext: receiveMsg.ext,
                chatType: receiveMsg.type,
                toJid: "",
                body: {
                    type: type,
                    msg: receiveMsg.data,
                },
            },
            value: receiveMsg.data
        };
    }
    else if (type == msgType.FILE) {
        sendableMsg = {
            id: receiveMsg.id,
            type: type,
            body: {
                id: receiveMsg.id,
                length: receiveMsg.file_length,
                from: receiveMsg.from,
                to: receiveMsg.to,
                type: receiveMsg.type,
                ext: receiveMsg.ext,
                chatType: receiveMsg.type,
                toJid: "",
                body: {
                    type: type,
                    url: receiveMsg.url,
                    filename: receiveMsg.filename,
                    msg: "当前不支持此格式消息展示",
                },
            },
            value: receiveMsg.data
        };
    }
    else if (type == msgType.AUDIO) {
        sendableMsg = {
            id: receiveMsg.id,
            type: type,
            accessToken: receiveMsg.token || receiveMsg.accessToken,
            body: {
                id: receiveMsg.id,
                length: receiveMsg.length,
                from: receiveMsg.from,
                to: receiveMsg.to,
                type: receiveMsg.type,
                ext: receiveMsg.ext,
                chatType: receiveMsg.type,
                toJid: "",
                body: {
                    type: type,
                    url: receiveMsg.url,
                    filename: receiveMsg.filename,
                    filetype: receiveMsg.filetype,
                    from: receiveMsg.from,
                    to: receiveMsg.to
                },
            },
        };
    }
    else if (type == msgType.VIDEO) {
        sendableMsg = {
            id: receiveMsg.id,
            type: type,
            accessToken: receiveMsg.token || receiveMsg.accessToken,
            body: {
                id: receiveMsg.id,
                length: receiveMsg.length,
                from: receiveMsg.from,
                to: receiveMsg.to,
                type: receiveMsg.type,
                ext: receiveMsg.ext,
                chatType: receiveMsg.type,
                toJid: "",
                body: {
                    type: type,
                    url: receiveMsg.url,
                    filename: receiveMsg.filename,
                    filetype: receiveMsg.filetype,
                    from: receiveMsg.from,
                    to: receiveMsg.to
                },
            },
        };
    }
    else {
        return;
    }
    this.saveMsg(sendableMsg, type, receiveMsg);
};
msgStorage.saveMsg = function (sendableMsg, type, receiveMsg) {
    //console.log('sendableMsgsendableMsg', sendableMsg)
    let me = this;
    let myName = wx.getStorageSync("myUsername");
    let sessionKey;
    // 仅用作群聊收消息，发消息没有 receiveMsg
    if (receiveMsg && receiveMsg.type == "groupchat") {
        sessionKey = receiveMsg.to + myName;
    }
    // 群聊发 & 单发 & 单收
    else {
        sessionKey = sendableMsg.body.from == myName
            ? sendableMsg.body.to + myName
            : sendableMsg.body.from + myName;
    }
    let curChatMsg = wx.getStorageSync(sessionKey) || [];
    let renderableMsg = msgPackager(sendableMsg, type, myName);
    if (type == msgType.AUDIO) {
        renderableMsg.msg.length = sendableMsg.body.length;
        renderableMsg.msg.token = sendableMsg.accessToken;
    }
    curChatMsg.push(renderableMsg);
    //console.log('renderableMsgrenderableMsg', renderableMsg)
    if (type == msgType.VIDEO) {
        renderableMsg.msg.token = sendableMsg.accessToken;
        //如果是音频则请求服务器转码
        // wx.downloadFile({
        // 	url: sendableMsg.body.body.url,
        // 	header: {
        // 		"X-Requested-With": "XMLHttpRequest",
        // 		Accept: "audio/mp3",
        // 		Authorization: "Bearer " + sendableMsg.accessToken
        // 	},
        // 	success(res){
        // 		// wx.playVoice({
        // 		// 	filePath: res.tempFilePath
        // 		// });
        // 		renderableMsg.msg.url = res.tempFilePath;

        // 		save();
        // 	},
        // 	fail(e){
        // 		console.log("downloadFile failed", e);
        // 	}
        // });
    }
    // else{
    // 	save();
    // }

    save();
    function save() {
        wx.setStorage({
            key: sessionKey,
            data: curChatMsg,
            success() {
                if (type == msgType.AUDIO || type == msgType.VIDEO) {
                    disp.fire('em.chat.audio.fileLoaded');
                }
                me.fire("newChatMsg", renderableMsg, type, curChatMsg, sessionKey);
            }
        });
    }
};

module.exports = msgStorage;
