// File: PageObjectUpdateEntity.ts
// Author: Vinicius Martins Ferraz
// Date: 23/07/2023
import { defaultUpdateEntityPageStructure } from './default-update-entity-page-structure';
import { PageElementTable } from '../page-element/page-element-table';
import { Form } from '../page-element/form';
import { PageObject } from './page-object';
import { UpdatePageStruct } from './i-page-structure';

export abstract class PageObjectUpdateEntity extends PageObject {

  form: Form;
  childTables: PageElementTable<any>[];

  constructor(pageStruct: UpdatePageStruct, protected pageTitle: string, protected newEntityUrl?: string) {
    super(pageStruct, pageTitle, newEntityUrl);

    this.form = new Form(pageStruct.formFields ?? []);
    this.childTables = pageStruct.childTables ?? [];
  }

  abstract setUpdateMode(): void;

  setFieldsValues(entityToBeCreated: any) {
    this.form.setFieldsValues(entityToBeCreated);
  }

  get formFields () {
    return this.form.fields;
  }

  clickSaveButton() {
    this.saveButton.click();
  }

  get saveButton() {
    return defaultUpdateEntityPageStructure.saveButton();
  }

  validateCreationSuccess() {
    defaultUpdateEntityPageStructure.snackBarCreationSuccess().validateDefaultFieldValues();
  }

  validateEditionSuccess() {
    defaultUpdateEntityPageStructure.snackBarEditionSuccess().validateDefaultFieldValues();
  }

  validateEmptyTables(tables: Array<PageElementTable<any>> = this.childTables) {
    tables.forEach(table => {
      table.validateTableWithData = false;
      table.validateDefaultFieldValues();
    });
  }
}


