import { MainStateManager } from "../../MainStateManager";
import { IMainStateFactory } from "../../Types";
import { Argument } from "./Argument";
import { SubPagesFactory } from "./SubPagesFactory";


export class SubPageItem {
    public get any() {
        return this as any;
    }
    public title: string = '';
    public mainStateManager: MainStateManager;
    public id: string;
    public isDeleted: boolean;
    #hasChange: boolean;
    public get hasChange(): boolean {
        return this.#hasChange;
    }

    public get isActiveSubPage(): boolean {
        return this.subPagesFactory.activeSubPage === this;
    }

    constructor(
        public subPagesFactory: SubPagesFactory,
        public pageKey: string,
        public lazyComponent?: React.LazyExoticComponent<React.ComponentType<any>>,
        public pageComponet?: React.ComponentType<any>,
    ) {
        this.id = Math.random().toString() + '-' + new Date().getMilliseconds().toString();
        this.mainStateManager = this.subPagesFactory.mainStateFactory.mainStateManager;
        // this.Component = this.mainStateManager.lazyLoadFactory.get(this.pageKey);
        this.#hasChange = false;
        this.isDeleted = false;
    }

    public close = () => {
        this.subPagesFactory.closeThisSubPageItem(this);
    };

    public select = () => {
        this.subPagesFactory.selectThisSubPageItem(this);
    };
    public argument?: Argument;
}

export const getSubPageItem = (mainState: IMainStateFactory) => {
    return mainState.elementsOfForm.subPageItem!;
}