<template>
  <chat-box
    ref="chatbox"
    :group="group"
    :is-show="isShow"
    :tree-data="treeData"
    :conversition-id="conversitionId"
    :current-member-list="currentMemberList"
    :chat-content-list="chatContentList"
    :is-start-record="isStartRecord"
    :invite-user-name="inviteUserName"
    :is-quit-show="isQuitShow"
    @resetCoversition="resetCoversition"
  />
</template>
<script>
import ChatBox from '../chatView/chatBox.vue';
import ConstConfig from '@/scripts/ConstConfig';
import Cookies from 'js-cookie';
import { getSimulationMemberList} from '@/api/simulation';
import {getAllConversition} from '@/api/chat';
export default {
    name:'DemonChat',
    components:{
        ChatBox
    },
    props: {
        group: {
            type: String,
            required: true
        },
        userRole: {
            type: String,
            required: true
        }
    },
    data() {
        return {
            isHasCoversition:false,
            conversitionId:'',
            currentMemberList:[],
            memberData:{},
            chatContentList:[],
            activeTrainList:[],
            isStartRecord:false,
            inviteUserName:'',
            createCoversition:true,
            inviteUser:{},
            isQuitShow:false,
            treeData:[],
            driverList:[],
            simulationUsers:{}
        };
    },
    computed:{
        isShow() {
            return this.userRole != '' &&
             this.userRole != 'ADMIN' && this.userRole != 'AUDIENCE' &&
            !this.isHasCoversition && this.createCoversition;
        }
    },
    watch:{
        '$store.state.map.mapViewLoadedCount': function (val) { // 地图视图加载完成标识 开始获取仿真成员
            getSimulationMemberList(this.group).then(resp => {
                let lastData = JSON.stringify(resp.data);
                const roleTypeList = ConstConfig.ConstSelect.roleTypeNew;
                roleTypeList.forEach(function(element) {
                    const rolename = element.value;
                    if (Cookies.get('user_lang') == 'en') {
                        lastData = lastData.replace(new RegExp(rolename, 'g'), element.enLabel);
                    } else {
                        lastData = lastData.replace(new RegExp(rolename, 'g'), element.label);
                    }
                });
                lastData = JSON.parse(lastData);
                const lastMemberList = [];
                const dispatcherList = [];
                // const electricDispatcherList = [];
                const depotDispatcherList = [];
                const stationSupervisorList = [];
                this.driverList = [];
                const maintainerList = [];
                const driverList = [];
                this.treeData = [];
                lastData.forEach((member, index)=>{
                    if (member.type != '观众') {
                        if (!member.userId) {
                            member.userId = '';
                            member.disabled = false;
                        } else {
                            member.disabled = true;
                        }
                        const name = member.name == undefined ? '' : '-' + member.name;
                        if (member.deviceCode) {
                            const device = this.$store.getters['map/getDeviceByCode'](member.deviceCode);
                            if (device) {
                                if (device._type == 'Train') {
                                    member.label = member.type + device.groupNumber + name;
                                    lastMemberList.push(member);
                                    if (this.activeTrainList.length > 0) {
                                        if (this.activeTrainList.includes(member.deviceCode)) {
                                            driverList.push(member);
                                        }
                                    } else {
                                        this.driverList.push(member);
                                    }
                                } else {
                                    member.label = member.type + device.name + name;
                                    lastMemberList.push(member);
                                    if (device._type == 'Station') {
                                        stationSupervisorList.push(member);
                                    }
                                }
                            } else {
                                member.label = member.type + member.deviceCode + name;
                                lastMemberList.push(member);
                            }
                        } else {
                            member.label = member.type + name;
                            if (member.type == '行调') {
                                dispatcherList.push(member);
                            } else if (member.type == '通号') {
                                maintainerList.push(member);
                            } else if (member.type == '车辆段调度') {
                                depotDispatcherList.push(member);
                            }
                            lastMemberList.push(member);
                        }
                    }
                });
                this.treeData = [{
                    label: '行调',
                    id: 'dispatcher',
                    type: 'role',
                    children: dispatcherList
                }, {
                    label: '车站值班员',
                    id: 'stationSupervisor',
                    type: 'role',
                    children: stationSupervisorList
                }, {
                    label: '司机',
                    id: 'driver',
                    type: 'role',
                    children: driverList
                }, {
                    label: '通号',
                    id: 'maintainer',
                    type: 'role',
                    children: maintainerList
                }, {
                    label: '车辆段',
                    id: 'depotDispatcher',
                    type: 'role',
                    children: depotDispatcherList
                }];
                this.memberData = lastMemberList;
            }).catch(() => {
                this.$messageBox('获取仿真成员列表失败！');
            });
        },
        // 创建会话
        '$store.state.socket.createConversition':function(val) {
            if (this.memberData.length > 0) {
                const member = this.memberData.find(member=>{ return member.id == val.creatorId; });
                if (member && member.userId == this.$store.state.user.id) {
                    // 当前用户创建的会话
                    this.isHasCoversition = true;
                    this.isStartRecord = true;
                    this.isQuitShow = true;
                    this.conversitionId = val.id;
                    const memberList = [];
                    val.memberIds.forEach(id=>{
                        if (val.creatorId == id) {
                            member.connect = true;
                            memberList.push(member);
                        } else {
                            const member = this.memberData.find(member=>{ return member.id == id; });
                            member.connect = false;
                            member && memberList.push(member);
                        }
                    });
                    this.currentMemberList = memberList;
                } else {
                    // 如果是观众看所有人的会话
                    if (this.userRole == 'AUDIENCE') {
                        this.isHasCoversition = true;
                        this.currentMemberList = this.memberData;
                    }
                }
            }
        },
        // 用户接受会话
        '$store.state.socket.acceptConversionInvite':function(val) {
            this.conversitionId = val.id;
            if (this.conversitionId) {
                let result = false;
                // 更改成员列表里面的成员状态
                const memberList = this.currentMemberList.map(member => {
                    if (member.id == val.memberId) {
                        member.connect = true;
                        result = true;
                    }
                    return member;
                });
                // 如果该用户不在成员列表里面，就动态加进去（当前会话）
                if (!result && this.conversitionId) {
                    const member = this.memberData.find(member=>{ return member.id == val.memberId; });
                    if (member) {
                        member.connect = true;
                        memberList.push(member);
                        // 如果是当前的用户
                        if (member.userId == this.$store.state.user.id) {
                            memberList.push(this.inviteUser);
                            this.isStartRecord = true;
                            if (member.userId != this.inviteUser.userId) {
                                this.isQuitShow = false;
                            } else {
                                this.isQuitShow = true;
                            }
                            this.inviteUser = {};
                            this.isHasCoversition = true;
                        }
                    }
                }
                this.currentMemberList = memberList;
            }
        },
        // 会话聊天消息
        '$store.state.socket.conversationInfo':function (val, old) { //  仿真聊天
            const simulationText = this.$store.state.socket.conversationInfo;
            if (val.messageType == 'MESSAGE' && (this.conversitionId == val.id || this.userRole == 'AUDIENCE')) {
                this.chatContentList.push(this.addContent(simulationText.message));
            }
        },
        // 按计划行车的列车列表更新(更新司机列表)
        '$store.state.map.activeTrainListChange': function (val) {
            const activeTrainList = this.$store.state.map.activeTrainList;
            if (this.driverList.length > 0) {
                const driverList = [];
                if (activeTrainList && activeTrainList.length) {
                    activeTrainList.forEach(groupNumber => {
                        const drivers = this.driverList.find(driver=>{
                            return driver.deviceCode == groupNumber;
                        });
                        if (drivers) {
                            driverList.push(drivers);
                        }
                    });
                }
                this.treeData[2].children = driverList;
            } else {
                this.activeTrainList = activeTrainList;
            }
        },
        // 剧本执行完成消息
        '$store.state.socket.scriptFinish':function(val, old) {
            this.$message('剧本执行完成');
        },
        // 退出会话消息
        '$store.state.socket.overConversition': function (val) {
            if (val.id === this.conversitionId) {
                this.conversitionId = '';
                this.currentMemberList = [];
                this.chatContentList = [];
                this.isHasCoversition = false;
                this.isStartRecord = false;
            }
        },
        // 邀请会话的消息
        '$store.state.socket.inviteSimulationConversition':function(val) {
            const member = this.memberData.find(member=>{ return member.id == val.creatorId; });
            if (member) {
                this.inviteUserName = member.label;
                this.conversitionId = val.id;
                member.connect = true;
                member.online = true;
                this.inviteUser = member;
                this.$refs.chatbox.inviteMember();
            }
        }

    },
    mounted() {
    },
    methods:{
        addContent(simulationText) {
            const text = {};
            const member = this.currentMemberList.find(member=>{
                return member.id == simulationText.memberId;
            });
            if (member) {
                text.self = (this.$store.state.user.id == member.userId);
                text.member = member;
                text.chatTime = simulationText.time;
                text.src = simulationText.audioPath;
                text.message = simulationText.content;
            }
            return text;
        },
        clearAllData() {
            this.resetCoversition();
            this.createCoversition = false;
        },
        resetCoversition() {
            this.conversitionId = '';
            this.isHasCoversition = false;
            this.currentMemberList = [];
            this.chatContentList = [];
            this.isStartRecord = false;
            this.inviteUserName = '';
            this.inviteUser = {};
            this.isQuitShow = false;
        }
        // isAudienceInitData() {
        //     getAllConversition(this.group).then(resp => {
        //         const messages = [];
        //         if (resp.data && resp.data.length) {
        //             debugger;
        //             resp.data.forEach(conversation => {
        //                 (conversation.messageList || []).forEach(message => {
        //                     const member = this.memberData[message.memberId];
        //                     message.src = `/audio/${message.audioPath}`;
        //                     message.members = conversation.memberList;
        //                     if (member) {
        //                         message.self = this.$store.state.userId == member.userId;
        //                     }
        //                     messages.push(message);
        //                 });
        //                 if (this.userRole !== 'AUDIENCE') {
        //                     const user = this.simulationUsers[this.$store.state.user.id];
        //                     this.isConversitionCreator = conversation.creatorId == user.memberId;
        //                     !conversation.over && conversation.memberList.forEach(member =>{
        //                         if (member.memberId == user.memberId && member.connect) {
        //                             this.conversitionMemberList = conversation.memberList;
        //                             this.conversitionId = conversation.id;
        //                             this.messageList = [];
        //                             conversation.messageList.forEach(message => {
        //                                 const member = this.memberData[message.memberId];
        //                                 message.src = `/audio/${message.audioPath}`;
        //                                 if (member) {
        //                                     message.self = this.$store.state.userId == member.userId;
        //                                 }
        //                                 this.privateMessageList.push(message);
        //                                 this.messageList.push(message);
        //                             });
        //                         }
        //                     });
        //                 }
        //             });
        //         }
        //         this.commonMessageList = messages.sort(this.sortByMessageTime);
        //         // this.initCommonMemberList();
        //     });
        // }
    }
};
</script>
