import {Component, EventEmitter, OnInit, Output, ViewChild} from '@angular/core';
import {AlarmService} from '../../alarm/alarm.service';
import {FindUserComponent} from '../../alarm/modal/find-user/find-user.component';
import {NzFormatEmitEvent, NzMessageService, NzTreeComponent, NzTreeNode} from 'ng-zorro-antd';
import {OverAllService} from '../../overAll/overAll.service';

@Component({
    selector: 'smart-alarm-modal',
    templateUrl: './alarm-modal.component.html',
    styles: [
            `
            .tree-div {
                border: 1px solid #999;
                max-height: 200px;
                overflow: auto
            }
        `
    ]
})
export class AlarmModalComponent implements OnInit {
    @ViewChild('smartFindUser') smartFindUser: FindUserComponent;
    @ViewChild('nzTree') nzTree: NzTreeComponent;
    @Output() done = new EventEmitter<any>();

    modalTitle = '添加告警';
    tabNum = 0;
    isShow = false;
    nodes;
    nodeList;

    groupList;
    sendOption = [];
    objList;

    selectTreeList = [];
    validateForm;

    constructor(private alarmSer: AlarmService, private message: NzMessageService,
                private overAllSer: OverAllService) {
    }

    ngOnInit() {
        this.initForm();
        this.getSendFun();
        this.getACtion();
        this.getGroup();
        this.getZabbixObj();
    }

    //初始化
    initForm() {
        this.selectTreeList = [];
        this.validateForm = {
            name: null,
            alertGroupId: null,
            warn:0,
            serious:0,
            mediaTypeIds:[],
            def_longdata:null,
            r_longdata:null,
            r_shortdata:null,
            userIds:null,
        };
    }

    //获取告警目标
    getACtion() {
        this.overAllSer.findGroup().subscribe(
            (res) => {
                if (res.errCode == 10000) {
                    const dataSet = res.data;
                    dataSet.forEach(res => {
                        res.title = res.name;
                        res.key = res.groupid;
                    });
                    this.nodeList = dataSet;
                    this.toNode(dataSet);
                } else {
                    this.message.info(res.errMsg);
                }
            }
        );
    }

    //获取告警分组
    getGroup(){
        this.alarmSer.alertGroupFind().subscribe(
            (res) => {
                if (res.errCode == 10000) {
                    this.groupList = res.data;
                }
            }
        );
    }

    toNode(data) {
        this.nodes = data.map(res => {
            return new NzTreeNode(res);
        });
    }

    //下级
    mouseAction(name: string, event: NzFormatEmitEvent) {
        const index = <any>event.node.key - 1;
        const data = {
            'groupids': [event.node.origin.groupid],
            'hostExtend': {
                'superiorHostid': null
            }
        };
        this.overAllSer.findDetail(data).subscribe(
            (res) => {
                if (res.data) {
                    const dataSet = res.data;
                    dataSet.forEach(res => {
                        res.title = res.name;
                        res.key = res.groupid;
                        res.isLeaf = true;
                    });
                    event.node.addChildren(dataSet);
                    this.nodeList[index].children = dataSet;
                    this.nodeList[index].expanded = true;
                } else {
                    event.node.addChildren([]);
                    this.message.info('该分组下无资源');
                }

            }
        );
        setTimeout(_ => {
        }, 1000);
        // }
    }

    //选择树节点
    selectCheckTree(event: NzFormatEmitEvent) {
        if (event.node.isChecked) {
            this.selectTreeList.push(event.node.origin.hostid);
        } else {
            const index = this.selectTreeList.indexOf(event.node.origin.hostid);
            this.selectTreeList.splice(index, 1);
        }
    }

    //获取发送方式
    getSendFun() {
        this.alarmSer.mediaTypeFind({}).subscribe(
            (res) => {
                if (res.errCode == 10000) {
                    this.sendOption = res.data;
                    this.sendOption.forEach(res => {
                        res.label = res.description;
                        res.value = res.mediatypeid;
                        res.checked = false;
                    });
                }
            }
        );
    }

    //获取发送对象 zabbix
    getZabbixObj() {
        this.alarmSer.zUserFind({}).subscribe(
            (res) => {
                if (res.errCode == 10000) {
                    this.objList = res.data;
                }
            }
        );
    }

    showModal(data) {
        this.isShow = true;
    }

    handleEditCancel() {
        this.isShow = false;
    }

    tabsChange(index) {
        this.tabNum = index;
    }

    handEditleOk() {
        const optionArr = [];
        this.sendOption.forEach(res=>{
            if(res.checked){
                optionArr.push(res.value);
            }
        });
        if(this.validateForm.warn){
            this.validateForm.warn = 1;
        }else{
            this.validateForm.warn = 0
        }

        if(this.validateForm.serious){
            this.validateForm.serious = 1;
        }else{
            this.validateForm.serious = 0
        }

        const data = {
            name: this.validateForm.name,
            alertGroupId: this.validateForm.alertGroupId,
            warn:this.validateForm.warn,
            serious:this.validateForm.serious,
            mediaTypeIds:optionArr,
            userIds:this.validateForm.userIds,
            def_longdata:this.validateForm.def_longdata,
            r_longdata:this.validateForm.r_longdata,
            r_shortdata:this.validateForm.r_shortdata,
        };
        this.alarmSer.actionCreate(data).subscribe(
            (res) => {
                if(res.errCode == 10000){
                    this.isShow = false;
                    this.initForm();
                    this.done.emit();
                }
                this.message.info(res.errMsg);
            }
        );
    }

}
