import { IAbstractObject } from '@vmfvmf/kraftos-lib';
import { PageElementButton } from './page-element-button';
import { IPageElementTableHeader, PageElementTableHeader } from './page-element-table-header';

export const DEFAULT_ACTION_OPTIONS = [
  Cypress.env('RESULT_TABLE_ROW_DEFAULT_UPDATE_OPTION'),
  Cypress.env('RESULT_TABLE_ROW_DEFAULT_DELETE_OPTION')
];

export interface IPageElementTableRow extends IPageElementTableHeader {
  rowNumber?: string;
}

export class PageElementTableRow extends PageElementTableHeader {
  rowNumber?: string;

  constructor(ipe: IPageElementTableRow) {
    super(ipe);
    this.thTd = 'td';
    this.rowNumber = ipe.rowNumber || '1';
    this.actions = ipe.actions || DEFAULT_ACTION_OPTIONS;
  }

  override validateDefaultFieldValues(): void {
      super.validateDefaultFieldValues();
  }

  override get actionsMenuButton() {
    let actionMenu = this._actionsMenuButton ? this._actionsMenuButton:
     this.rowNumber != '99' ?
      new PageElementButton({
        id:this.tableId.replace('-id', '-row' + this.rowNumber + '-menu-button-id'),
        iconName: 'menu',
        tooltip: Cypress.env('RESULT_TABLE_ROW_ACTION_MENU_TOOLTIP')
      }) :
      new PageElementButton({
        id:this.tableId + ' tr:last-child mat-icon:first-child',
        iconName: 'menu',
        tooltip: Cypress.env('RESULT_TABLE_ROW_ACTION_MENU_TOOLTIP')
      });
    return actionMenu;
  }

  validateRow(result: string[]) {
    this.thTdsText = result;
    this.validateDefaultFieldValues();
  }

  validateRowWObject(iAbs: IAbstractObject, interfaceToRowConverter: (iabs: IAbstractObject) => string[]) {
    this.validateRow(interfaceToRowConverter(iAbs));
  }

  get editButton() {
    let editButton = new PageElementButton({id: '#menu-option' + this.rowNumber + '-edit-button-id'});
    if (this.rowNumber == '99') {
      editButton = new PageElementButton({id: '[id^="menu-option"][id$="edit-button-id"]'});
    }
    return editButton;
  }

  get deleteButton() {
    let deleteButton = new PageElementButton({id: '#menu-option' + this.rowNumber + '-delete-button-id'});
    if (this.rowNumber == '99') {
      deleteButton = new PageElementButton({id: '[id^="menu-option"][id$="delete-button-id"]'});
    }
    return deleteButton;
  }

  buttonEditClick() {
    this.actionsMenuButton.click();
    cy.wait(300);
    this.editButton.click();
  }

  buttonDeleteClick() {
    this.actionsMenuButton.click();
    cy.wait(300);
    this.deleteButton.click();
  }
}
