export class AggregationMappingFormE2EComponent {
  private readonly root: string = 'aggregation-mapping-form';

  private readonly nameInput: string = 'aggregation-mapping-name-text-input';
  private readonly formEngineInput: string = 'form-engine-name-text-input';
  private readonly formIdInput: string = 'form-id-text-input';
  private readonly dataFieldInputPrefix: string = 'aggregation-mapping-field-mapping-form-';
  private readonly sourceMappingFieldInputPrefix: string = 'source-mapping-field-';
  private readonly targetMappingFieldInputPrefix: string = 'target-mapping-field-';
  private readonly addDataFieldButton: string = 'add-mapping-button';
  private readonly deleteDataFieldButtonPrefix: string = 'remove-mapping-button-';
  private readonly saveButton: string = 'save-button';
  private readonly cancelButton: string = 'cancel-button';

  public getRoot(): Cypress.Chainable<Element> {
    return cy.getTestElement(this.root);
  }

  public getNameInput(): Cypress.Chainable<Element> {
    return cy.getTestElement(this.nameInput);
  }

  public getFormEngineInput(): Cypress.Chainable<Element> {
    return cy.getTestElement(this.formEngineInput);
  }

  public getFormIdInput(): Cypress.Chainable<Element> {
    return cy.getTestElement(this.formIdInput);
  }

  public getDataFieldInput(index: number): Cypress.Chainable<Element> {
    return cy.getTestElement(`${this.dataFieldInputPrefix}${index}`);
  }

  public getAddFieldButton(): Cypress.Chainable<Element> {
    return cy.getTestElement(this.addDataFieldButton);
  }

  public getSourceMappingFieldInput(index: number): Cypress.Chainable<Element> {
    return cy.getTestElement(`${this.sourceMappingFieldInputPrefix}${index}-text-input`);
  }

  public getTargetMappingFieldInput(index: number): Cypress.Chainable<Element> {
    return cy.getTestElement(`${this.targetMappingFieldInputPrefix}${index}-text-input`);
  }

  public getDataFieldDeleteButton(index: number): Cypress.Chainable<Element> {
    return cy.getTestElement(this.deleteDataFieldButtonPrefix + index);
  }

  public getSaveButton(): Cypress.Chainable<Element> {
    return cy.getTestElement(this.saveButton);
  }

  public getCancelButton(): Cypress.Chainable<Element> {
    return cy.getTestElement(this.cancelButton);
  }
}