import { BaseDialog } from '@/manager/shared/base/BaseDialog';
import { TaxEditData } from '@/manager/modules/ui/tax/tax-types';
import { SingleAutocomplete } from '@/manager/shared/components/SingleAutocomplete';
import { getDialogErrorsHost, getInputHostByLabel, getSnackbarHost } from '@/manager/shared/utils/locator-utils';
import { formatPercentage } from '@/shared/utils/formatters';
import { Page } from '@playwright/test';

export class TaxEditDialog extends BaseDialog {
  readonly b2cTaxAutocomplete = new SingleAutocomplete(getInputHostByLabel(this.main, 'B2C'));
  readonly b2bTaxAutocomplete = new SingleAutocomplete(getInputHostByLabel(this.main, 'B2B'));
  readonly errors = getDialogErrorsHost(this.main);
  readonly snackbar = getSnackbarHost(this.host, 'Action successfully executed!');

  constructor(host: Page) {
    super(host, 'edit-taxes-dialog');
  }

  async edit(data: TaxEditData): Promise<void> {
    await this.fill(data);
    await Promise.all([this.snackbar.waitFor(), this.submit()]);
  }

  async fill(data: TaxEditData): Promise<void> {
    if (data.b2c != null) {
      await this.b2cTaxAutocomplete.select(formatPercentage(data.b2c.rate));
    }

    if (data.b2b != null) {
      await this.b2bTaxAutocomplete.select(formatPercentage(data.b2b.rate));
    }
  }

  async submit(): Promise<void> {
    await this.submitButton.click();
  }
}
