import { PANEL_MAIN, VIEW_MAIN, ROOT_MAIN } from '../const';
import { RouterGenericBase } from './Types';

export class Page<T extends RouterGenericBase = RouterGenericBase> {
  public panelId: T['panelId'];
  public viewId: T['viewId'];
  public rootId: T['rootId'];
  public additionalViews: Array<T['viewId']> = [];
  public isInfinityPanel = false;

  constructor(panelId?: T['panelId'], viewId?: T['viewId'], rootId?: T['rootId']) {
    this.panelId = panelId || PANEL_MAIN;
    this.viewId = viewId || VIEW_MAIN;
    this.rootId = rootId || ROOT_MAIN;
  }

  clone() {
    const p = new Page(this.panelId, this.viewId, this.rootId).addViews(this.additionalViews);
    p.isInfinityPanel = this.isInfinityPanel;
    return p;
  }

  makeInfinity() {
    this.isInfinityPanel = true;
    return this;
  }

  addViews(views: Array<T['viewId']>) {
    this.additionalViews = [...views];
    if (this.additionalViews.length > 0 && !this.additionalViews.includes(this.viewId)) {
      this.additionalViews.push(this.viewId);
    }

    return this;
  }
}
