import User from "../../FrameWork/User/User";
import Common5 from "../../Platform/th/Common5";
import GameBase from "../SCommon/GameBase";
import PrefabManage, { GameType } from "../PrefabManager/PrefabManage";
import ChatDialog from "./ChatDialog";
import ChatManager from "./ChatManager";
import JuQingManager from "./JuQingManager";
import { ryw_Event } from "../../FrameWork/Event/EventEnum";
import EventMgr from "../../FrameWork/Event/EventMgr";
import NewGuideScript from "../NewGuide/NewGuideScript";
import TaskManager, { MainTaskIdEnum } from "./TaskManager";
const { ccclass, property } = cc._decorator;

@ccclass
export default class ChatList extends GameBase {
    //聊天列表
    @property(cc.Node)
    chatListNode: cc.Node = null
    @property(cc.Node)
    chatListContent: cc.Node = null
    @property(cc.Node)
    listItem: cc.Node = null

    curDay = 0//当天
    curChatTag = ''
    isChange = true

    initView(chatTag) {
        this.curChatTag = chatTag
        this.curDay = User.getDay()
        this.initListInfo()
    }

    onLoad() {
        super.onLoad()

    }

    protected start(): void {
        this.curDay = User.getDay()
        this.isChange = true
        this.initListInfo()

        EventMgr.onEvent_custom(ryw_Event.ExitBtnEvent, () => {

            if (cc.isValid(this.node, true)) {
                this.isChange = true
                console.log('initListInfo++++++++++++刷新')
                this.chatListContent.removeAllChildren()
                this.chatListContent.destroyAllChildren()
                this.initListInfo()
            }

        }, this)
        console.log('isHaveNewMessage=========================', ChatManager.isHaveNewMessage());

        this.scheduleOnce(() => {
            PrefabManage.preloadPrefabByType(GameType.ChatDialog)
        }, 0)

        let mainTaskInfo: any = TaskManager.getCurUnLockMainTaskInfo()
        let mainId = mainTaskInfo.Id
        if (mainId == MainTaskIdEnum.MainTask_101) {
            this.guideView([this.node.getChildByName("guide")])
        }
    }
    onDestroy(): void {
        super.onDestroy()
    }

    //初始化聊天列表(第几天)
    initListInfo() {
        console.log("当前是第" + this.curDay + "天--")

        let allJuQingChatConfig: any = Common5.allJuQingChatConfig

        let nameArray = []
        let tempNameTab = []
        let tempChilds = []
        Object.keys(allJuQingChatConfig).forEach(name => {
            //console.log(name)
            nameArray.push(name)
        });
        let count = nameArray.length;
        let i = 0
        this.schedule(() => {
            let name = nameArray[i]
            let personConfig = JuQingManager.getPersonJsonByJsonName(name)
            if (personConfig.type == 'RJB' || personConfig.type == 'DH') {

            } else {

                let personJson = ChatManager.getPersonConfig(name)
                let recordData = ChatManager.getChatRecordDataByJson(name)

                //console.log(recordData,'recordData+++++++++++++===')
                if (recordData && recordData.length > 0) {
                    //duihuaArray.push[]                
                    let childItem = cc.instantiate(this.listItem)
                    let nameStr = ChatManager.getNameByJson(name)
                    childItem.getChildByName("nameStr").getComponent(cc.Label).string = nameStr
                    tempNameTab.push(nameStr)
                    let chatPerson = ChatManager.getConfigByJsonName(name)

                    Common5.addUrlSprite_custom("head/" + chatPerson.imgPath, childItem.getChildByName("avatar").getComponent(cc.Sprite));
                    let itemInfo = this.getListItemStr(name, personJson, recordData, childItem.getChildByName("flag"))
                    let contentStr = itemInfo.contentDesc
                    let indexStr = itemInfo.indexStr
                    if (contentStr.length > 14) {
                        contentStr = contentStr.substr(0, 14) + "..."
                    }
                    childItem.getChildByName("contentStr").getComponent(cc.Label).string = contentStr
                    childItem.attr({ jsonName: name, playInfo: allJuQingChatConfig[name], indexStr: indexStr })
                    childItem.active = true
                    let isFinish = true
                    for (let rei = 0; rei < recordData.length; rei++) {
                        let data_ = recordData[rei]
                        if (data_.isFinish == false) {
                            isFinish = false
                            break
                        }
                    }
                    childItem['isFinish'] = isFinish
                    tempChilds[tempChilds.length] = childItem

                }
            }
            i++

            if (i == count && this.isChange) {
                //聊天置顶
                this.isChange = false
                if (tempChilds.length > 0) {
                    let idexz = 0
                    for (let i = 0; i < tempChilds.length; i++) {

                        if (!tempChilds[i]['isFinish']) {
                            idexz++
                            tempChilds[i].zIndex = idexz
                            this.chatListContent.addChild(tempChilds[i])
                        }
                    }

                    for (let i = 0; i < tempChilds.length; i++) {
                        if (tempChilds[i]['isFinish']) {
                            idexz++
                            tempChilds[i].zIndex = idexz
                            this.chatListContent.addChild(tempChilds[i])
                        }
                    }

                }


                if (Common5.isOpenChatPeople != '') {
                    let people = Common5.isOpenChatPeople;
                    let event = {
                        target: {
                            jsonName: people
                        }
                    }
                    Common5.isOpenChatPeople = ''
                    this.onItemListClick(event)
                }
                PrefabManage.preloadPrefabByType(GameType.ChatDialog)
            }
        }, 0, count - 1, 0)


    }
    //点击进入聊天
    onItemListClick(event) {
        PrefabManage.loadPrefabByType(GameType.ChatDialog, null, (prefabNode) => {
            prefabNode.getComponent(ChatDialog).enterDialog(event.target.jsonName, null, () => {
                this.initListInfo()
            })
        })
    }

    //显示列表的显示内容
    getListItemStr(jsonName, personJson, recordData, flagNode) {
        let indexStr = ''
        //优先显示未完成对话的第一条
        for (let i = 0; i < recordData.length; i++) {
            if (!recordData[i].isFinish) {
                indexStr = recordData[i].indexStr
                for (let j = 0; j < personJson.length; j++) {
                    if (personJson[j].indexStr == indexStr) {
                        flagNode.active = true
                        return { contentDesc: personJson[j].contentDesc, indexStr: indexStr }
                    }
                }
            }
        }
        //显示已聊天的最后一条
        indexStr = recordData[recordData.length - 1].indexStr
        for (let k = personJson.length - 1; k >= 0; k--) {
            if (personJson[k].indexStr == indexStr) {
                flagNode.active = false
                return { contentDesc: personJson[k].contentDesc, indexStr: indexStr }
            }
        }

        PrefabManage.showTextTips('这里没获取到内容?' + jsonName)
        flagNode.active = false
        return { contentDesc: "", indexStr: "" }
    }

    guideView(nodeArray, opacity = -1) {
        PrefabManage.loadPrefabByType(GameType.GuideMskNode, this.node, (prefab) => {
            // prefab.zIndex = 199
            let guideNodeArray = nodeArray
            let firstNode = guideNodeArray.shift()
            prefab.getComponent(NewGuideScript).setBindNode(firstNode, guideNodeArray)
            if (opacity != -1) {
                prefab.getComponent(NewGuideScript).setOpacityMaskNode(opacity)
            }
        })
    }
}