import { PageHelper } from '../page-helper.po';

export class Input {
  id: string;
  oldValue: string;
  newValue: string;
}

export class ManagerModulesPageHelper extends PageHelper {
  pages = { index: { url: '#/mgr-modules', id: 'cd-mgr-module-list' } };

  /**
   * Selects the Manager Module and then fills in the desired fields.
   */
  editMgrModule(name: string, inputs: Input[]) {
    this.navigateEdit(name);

    for (const input of inputs) {
      // Clears fields and adds edits
      cy.get(`#${input.id}`).clear().type(input.newValue);
    }

    cy.contains('button', 'Update').click();
    // Checks if edits appear
    this.getExpandCollapseElement(name).should('be.visible').click();
    for (const input of inputs) {
      cy.get('[data-testid="datatable-row-detail"] [cdstablerow] [cdstabledata] span').contains(
        input.newValue
      );
    }

    // Clear mgr module of all edits made to it
    this.navigateEdit(name);

    // Clears the editable fields
    for (const input of inputs) {
      if (input.oldValue) {
        const id = `#${input.id}`;
        cy.get(id).clear();
        if (input.oldValue) {
          cy.get(id).type(input.oldValue);
        }
      }
    }

    // Checks that clearing represents in details tab of module
    cy.contains('button', 'Update').click();
    this.getExpandCollapseElement(name).should('be.visible').click();
    for (const input of inputs) {
      if (input.oldValue) {
        cy.contains('[data-testid="datatable-row-detail"] [cdstablerow] [cdstabledata]', input.id)
          .parent('[cdstablerow]')
          .find('[cdstabledata]')
          .should('not.contain', input.newValue);
      }
    }
  }
}
