import { error } from 'cypress/types/jquery';
import { PageElement, IPageElement } from './page-element';
import { IPageElementMatTab, PageElementMatTab } from './page-element-mat-tab';
import { IAbstractObject } from '@vmfvmf/kraftos-lib';

export interface IPageElementMatTabGroup extends IPageElement {
  tabs: IPageElementMatTab[];
}

export class PageElementMatTabGroup<I extends IAbstractObject> extends PageElement {
  tabs: PageElementMatTab<I>[];

  constructor(ipe: IPageElementMatTabGroup) {
    super(ipe);
    this.id = ipe.id || 'update-page-tab-group-id' ;
    this.tabs = ipe.tabs.map(t => new PageElementMatTab(t));
  }


  selectTabByText(tabText: string) {
    if (!this.tabs.some(t => t.title === tabText)) {
      throw error(`There's no tab with text ${tabText}`);
    }
    this.tabGroupHeader.contains(tabText).click();
  }

  get tabGroupHeader() {
    return this.pageElement.get('mat-tab-header');
  }

  override validateDefaultFieldValues(): void {
      super.validateDefaultFieldValues();

      this.tabs.forEach((tab: PageElementMatTab<I>, idx: number) => {
        if (idx !== 0) {
          this.tabGroupHeader.contains('div[role="tab"]', tab.title);
          this.tabs[idx].validateDefaultFieldValues();
        }
      });
  }
}
