import { BasePageData } from "../Page/BasePageData";
import { PageEventType } from "../Page/Events";
import { Callback } from "../Types";
import { MainStacksFactory } from "./Main";

export interface IResponseOfReport<IROW> {
    rows: IROW[];
    searchParameter: any;
}

export class StackFactory {
    public stackId: number = 0;
    public isDeleted: number = 0;


    trigger = (eventName: PageEventType, ...args: any) => {
        this.pageData.Eventing.triggerControl(eventName, `stack-${this.pageData.id}-${this.stackId}`, args);
    }

    on = (eventName: PageEventType, callBack: Callback) => {
        this.pageData.Eventing.onControl(eventName, `stack-${this.pageData.id}-${this.stackId}`, callBack);
    }

    removeOn = (eventName: PageEventType) => {
        this.pageData.Eventing.removeOnControl(eventName, `stack-${this.pageData.id}-${this.stackId}`);
    }

    stackWillUnMount = () => {
        this.pageData.Eventing.trigger('field.set.will.onmount')
        // this.pageData.Eventing.triggerControl('field.set.will.onmount', `stack-${this.pageData.id}-${this.stackId}`);
    }

    constructor(
        public pageData: BasePageData,
        public mainStackFactory: MainStacksFactory
    ) {
        this.stackId = mainStackFactory.stacks.length;
    }
}