import {Component, EventEmitter, OnInit, Output} from '@angular/core';
import {NzTreeNode} from 'ng-zorro-antd';
import {SystemService} from '../../system/system.service';
import {CommonService} from '../../shared/common/common.service';

@Component({
    selector: 'smart-select-person',
    templateUrl: './select-person.component.html',
    styles: []
})
export class SelectPersonComponent implements OnInit {
    @Output() done = new EventEmitter();

    isVisible = false;
    title;
    groupList;
    userList;
    selectList = [];
    nodes: any[];
    allChecked = false;
    checkedNumber = 0;
    disabledButton = true;
    indeterminate = false;
    roleId;
    deleteList=[];
    displayData: Array<{ key1: string; key2: number; key3: string; key4: string; checked: boolean }> = [];

    constructor(private systemSer: SystemService, private commonSer: CommonService) {
    }

    checkAll(value: boolean): void {
        this.displayData.forEach(data => data.checked = value);
        this.refreshStatus();
    }

    currentPageDataChange($event: Array<{ key1: string; key2: number; key3: string; key4: string; checked: boolean }>): void {
        this.displayData = $event;
    }

    selectItem(item,e){
        if(e){
            this.selectList.push(item);
            this.deleteList.forEach((value,index)=>{
                if(value.id == item.id){
                    this.deleteList.splice(index,1)
                }
            })
        }else{
            this.selectList.forEach((value,index)=>{
                if(value.id == item.id){
                    this.selectList.splice(index,1)
                }
            });
            if(item.isRole == 1){
                this.deleteList.push(item);
            }
        }
        this.refreshStatus()
    }

    deleteSelect(index){
        if(this.selectList[index].isRole == 1){
            this.deleteList.push(this.selectList[index]);
        }
        this.selectList.splice(index,1);
    }

    refreshStatus(): void {
        const allChecked = this.displayData.every(value => value.checked === true);
        const allUnChecked = this.displayData.every(value => !value.checked);
        this.allChecked = allChecked;
        this.indeterminate = (!allChecked) && (!allUnChecked);
        this.disabledButton = !this.userList.some(value => value.checked);
        this.checkedNumber = this.userList.filter(value => value.checked).length;
    }

    ngOnInit() {

    }

    init(){
        this.selectList = [];
        this.deleteList=[];
        this.allChecked = false;
        this.checkedNumber = 0;
        this.disabledButton = true;
        this.indeterminate = false;
    }

    showModal(title,roleId) {
        this.getGroup();
        this.isVisible = true;
        this.title = title;
        this.roleId = roleId;
        if(this.title == "授予用户"){

        }else{
            this.getUser();
        }
    }

    getUser() {
        const data = {
            'userBo': {
                search:null,
                organizationId:null
            },
            'pageNum': '1',
            'pageSize': '10'
        };
        this.systemSer.user(data).subscribe(
            (res) => {
                this.userList = res.data.data;
            }
        );
    }

    //组织信息
    getGroup() {
        this.systemSer.organization().subscribe(
            (res) => {
                this.groupList = res.data;
                if(this.title == "授予用户"){
                    this.getUserByOrgIdAboutRole(this.groupList[0].id);
                }
                this.groupList.forEach(
                    res => {
                        res.title = res.name;
                        res.key = res.id;
                    }
                );
                this.nodeTree();
            }
        );
    }

    //授予用户
    getUserByOrgIdAboutRole(orgId){
        const data = {
            orgId:orgId,
            roleId:this.roleId
        }
        this.systemSer.getUserByOrgIdAboutRole(data).subscribe(
            (res)=>{
                this.userList = res.data;
                this.userList.forEach(e=>{
                    if(e.isRole == 1){
                        e.checked = true;
                        this.selectList.push(e);
                    }
                })
            }
        )
    }

    nodeTree() {
        const tree = this.commonSer.listToTree('id', 'parentId', this.groupList,);
        const list = tree.map(res => {
            return new NzTreeNode(res);
        });
        this.nodes = list;
    }

    handleEditCancel(){
        this.isVisible = false;
        this.init();
    }

    handEditleOk(){
        if(this.title == "授予用户"){
            const data = {
                'select':this.selectList,
                'delete':this.deleteList
            }
            this.done.emit(data);
        }else{
            this.done.emit(this.selectList);
        }
        this.isVisible = false;
        this.init();
    }

}
