/**
 * UX polish — PIN inputs auto-submit on the 4th digit. Both the inline
 * recovery on /join (name-taken state) and the standalone /recover route
 * share the same auto-submit pattern: a $effect watching `pin.length === 4`.
 *
 * Coverage:
 *   - Inline recovery on /join: typing 4 digits navigates to /feed without
 *     a tap on Anmelden.
 *   - Standalone /recover: typing 4 digits navigates to /feed.
 */
import { test, expect } from '../../fixtures/test';
import { JoinPage, RecoverPage } from '../../page-objects';
import { clearAllStorage } from '../../helpers/storage-helpers';

test.describe('Auth — PIN auto-submit', () => {
  test('inline recovery: 4th digit auto-submits and navigates to /feed', async ({
    page,
    guest,
  }) => {
    const original = await guest('AutoInline');
    await clearAllStorage(page);

    const join = new JoinPage(page);
    await join.goto();
    await join.fillName('AutoInline');
    await join.submit();

    // Name-taken state: type the PIN one digit at a time, do NOT click submit.
    await expect(join.recoveryPinInput).toBeVisible();
    await join.recoveryPinInput.pressSequentially(original.pin, { delay: 30 });

    // Auto-submit must fire on the 4th digit.
    await page.waitForURL('**/feed', { timeout: 5_000 });
  });

  test('/recover: 4th digit auto-submits when the name is already filled in', async ({
    page,
    guest,
  }) => {
    const original = await guest('AutoRecover');
    await clearAllStorage(page);

    const recover = new RecoverPage(page);
    await recover.goto();
    await recover.nameInput.fill('AutoRecover');
    await recover.pinInput.pressSequentially(original.pin, { delay: 30 });

    await page.waitForURL('**/feed', { timeout: 5_000 });
  });
});
