import { test, expect, afterEach, vi } from 'vitest';
import { page, userEvent, server } from 'vitest/browser';
import { createLab } from '../public/model.js';
import '../public/component.css';
let cleanup, user;
afterEach(async()=>{try{await user?.cleanup();}finally{cleanup?.();document.body.replaceChildren();}});
for (const width of [1280,390,296]) {
  test(`Browser Mode: disclosure и клавиатура, viewport ${width}`,async()=>{
    await page.viewport(width,800);
    // Preview 5.1.0 invokes advanceTimers even with real timers (including delay=0).
    // Keep real time here; advance the mocked clock only when a test actually enables it.
    user=server.provider==='preview'
      ? userEvent.setup({advanceTimers:delay=>vi.isFakeTimers()?vi.advanceTimersByTimeAsync(delay):Promise.resolve()})
      : userEvent.setup();
    const root=document.createElement('main');document.body.append(root);root.className='demo-component';
    cleanup=createLab('fixed').mountDisclosure(root);
    await user.click(page.getByRole('button',{name:'Параметры заказа',exact:true}));
    await expect.element(page.getByRole('button',{name:'Параметры заказа',exact:true})).toHaveAttribute('aria-expanded','true');
    await expect.element(page.getByRole('textbox',{name:'Заметка'})).toHaveFocus();
    await user.keyboard('{Escape}');
    await expect.element(page.getByRole('button',{name:'Параметры заказа',exact:true})).toHaveFocus();
    expect(document.documentElement.scrollWidth).toBeLessThanOrEqual(window.innerWidth);
  });
}
