import type { Page, Locator } from '@playwright/test';

export class RecoverPage {
  readonly page: Page;
  readonly nameInput: Locator;
  readonly pinInput: Locator;
  readonly submitButton: Locator;
  readonly errorMessage: Locator;

  constructor(page: Page) {
    this.page = page;
    this.nameInput = page.getByTestId('recover-name-input');
    this.pinInput = page.getByTestId('recover-pin-input');
    this.submitButton = page.getByTestId('recover-submit');
    this.errorMessage = page.getByTestId('recover-error');
  }

  async goto() {
    await this.page.goto('/recover');
  }

  async recover(name: string, pin: string) {
    await this.nameInput.fill(name);
    // Filling the 4th digit fires the form's auto-submit (the onPinInput handler
    // calls handleRecover once pin.length === 4, see pin-auto-submit.spec). An explicit
    // submit click would race the ensuing navigation and detach mid-click, so only click
    // as a fallback if the button is still around (e.g. a partial / failed PIN).
    await this.pinInput.fill(pin);
    if (await this.submitButton.isEnabled().catch(() => false)) {
      await this.submitButton.click().catch(() => {
        /* auto-submit already navigated — nothing to click */
      });
    }
  }
}
