import { autorun, observable } from "mobx";
import { EventEmitter, EventHandler } from "./EventEmitter";

export enum GroupEvent {
    Initialize,
    ExpandedChanged
}

export class GridGroupModel extends EventEmitter<GroupEvent> {

    name : string;

    @observable
    expanded : boolean;

    constructor(name : string, eventHandler? : EventHandler<GroupEvent>) {
        super();

        this.name = name;
        this.expanded = true;

        if (eventHandler) {
            this.addEventHandler(eventHandler);
        }

        autorun(() => {
            const isExpanded = this.expanded;

            this.triggerEvent(GroupEvent.ExpandedChanged, {
                expanded: isExpanded
            });
        });
    }

    isExpanded() {
        return this.expanded;
    }

    onEvent(event : GroupEvent, ...args : any[]) {
        switch (event) {
            case GroupEvent.ExpandedChanged:
                this.expanded = args[0];
                break;
            default:
                break;
        }
    }
}

