import {Component, EventEmitter, OnInit, Output} from '@angular/core';
import {TopologyService} from '../../topology.service';
import {NzFormatEmitEvent, NzMessageService, NzTreeNode} from 'ng-zorro-antd';

@Component({
    selector: 'smart-device',
    templateUrl: './device.component.html',
    styles: [
        ``
    ]
})
export class DeviceComponent implements OnInit {
    @Output() done = new EventEmitter<any>();

    isValiaible;
    title = '添加设备';

    nodes;
    nodeList;
    selectTreeList = {
        hostIds:<any>[],
        httpIds:<any>[]
    };

    constructor(private topologySer: TopologyService,
                private message: NzMessageService) {
    }

    ngOnInit() {
        this.initForm();
    }

    showAddModal() {
        this.isValiaible = true;
        this.initForm();
        this.findTree();
    }

    initForm(){
        this.nodes = null;
        this.nodeList = [];
        this.selectTreeList = {
            hostIds:<any>[],
            httpIds:<any>[]
        };
    }

    //查询树
    findTree() {
        const data = {
            id: '',
            type: 'group'
        };
        this.topologySer.findTree(data).subscribe(
            (res) => {
                if (res.errCode == 10000) {
                    let option = res.data;
                    option.forEach(res => {
                        res.title = res.name;
                        res.key = res.id;
                        res.disabled = true;
                    });
                    this.nodeList = option;
                    this.toNode(option);
                } else {
                    this.message.info(res.errMsg);
                }
            }
        );
    }

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

    //获取下级
    mouseAction(name: string, event: NzFormatEmitEvent) {
        console.log(event);
        let type;
        if(event.node.level == 0){
            type = "host";   //主机
        }
        if(event.node.level == 1){
            type = "item";  //监控项
        }
        const index = <any>event.node.key - 1;
        const data = {
            'id': event.node.origin.id,
            'type': type
        };
        this.topologySer.findTree(data).subscribe(
            (res) => {
                if (res.data) {
                    console.log(res.data);
                    const dataSet = res.data;
                    dataSet.forEach(res => {
                        res.title = res.name;
                        res.key = res.id;
                    });
                    event.node.addChildren(dataSet);
                    this.nodeList[index].children = dataSet;
                    this.nodeList[index].expanded = true;
                } else {
                    event.node.addChildren([]);
                    this.message.warning('该下级为空');
                }

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

    //选择树节点
    selectCheckTree(event: NzFormatEmitEvent) {
        console.log(event);
        if (event.node.isChecked) {
            if(event.node.level == 1){
                this.selectTreeList.hostIds.push(event.node.origin.id);   //主机
            }
            if(event.node.level == 2){
                this.selectTreeList.httpIds.push(event.node.origin.id)  //监控项
            }
        } else {
            if(event.node.level == 1){
                const index = this.selectTreeList.hostIds.indexOf(event.node.origin.id);
                this.selectTreeList.hostIds.splice(index, 1);
            }
            if(event.node.level == 2){
                const index = this.selectTreeList.httpIds.indexOf(event.node.origin.id);
                this.selectTreeList.httpIds.splice(index, 1);
            }

        }
    }

    handEditleOk(){
        this.topologySer.findDefaultIcon(this.selectTreeList).subscribe(
            (res)=>{
                    if(res.data.length > 0){
                        this.done.emit(res.data);
                        this.isValiaible = false;
                    }else{
                        this.message.warning("该项无默认图标")
                    }
            }
        )
    }

    handleEditCancel(){
        this.initForm();
        this.isValiaible = false;
    }

}
