// @vitest-environment happy-dom

import { fireEvent, render } from '@testing-library/react';
import React from 'react';
import { describe, expect, it, vi } from 'vitest';
import { FloatingResearchDock } from '../floating-research-dock';

describe('FloatingResearchDock', () => {
  it('keeps Terminal immediately left of the AI launcher with compact spacing', () => {
    const toggleAi = vi.fn();
    const toggleTerminal = vi.fn();
    const view = render(
      <FloatingResearchDock
        aiOpen={false}
        terminalOpen={false}
        onToggleAi={toggleAi}
        onToggleTerminal={toggleTerminal}
      />,
    );

    const dock = view.getByTestId('interactive-research-dock');
    expect(dock.className).toContain('gap-1');
    expect(dock.className).toContain('right-4');

    const buttons = view.getAllByRole('button');
    expect(buttons).toHaveLength(2);
    expect(buttons[0]?.getAttribute('aria-label')).toBe('Open Local');
    expect(buttons[1]?.getAttribute('aria-label')).toBe('Open Interactive AI');

    fireEvent.click(buttons[0]!);
    fireEvent.click(buttons[1]!);
    expect(toggleTerminal).toHaveBeenCalledOnce();
    expect(toggleAi).toHaveBeenCalledOnce();
  });

  it('keeps the AI toggle on desktop while hiding the dock on mobile when AI is open', () => {
    const view = render(
      <FloatingResearchDock
        aiOpen
        terminalOpen={false}
        onToggleAi={() => undefined}
        onToggleTerminal={() => undefined}
      />,
    );

    const dock = view.getByTestId('interactive-research-dock');
    expect(dock.className).toContain('hidden');
    expect(dock.className).toContain('sm:flex');
    expect(view.getByLabelText('Minimize Interactive AI')).toHaveAttribute('aria-pressed', 'true');
  });

  it('keeps the Terminal toggle on desktop while hiding the dock on mobile when Terminal is open', () => {
    const view = render(
      <FloatingResearchDock
        aiOpen={false}
        terminalOpen
        onToggleAi={() => undefined}
        onToggleTerminal={() => undefined}
      />,
    );

    const dock = view.getByTestId('interactive-research-dock');
    expect(dock.className).toContain('hidden');
    expect(dock.className).toContain('sm:flex');
    expect(view.getByLabelText('Minimize project terminal')).toHaveAttribute('aria-pressed', 'true');
  });
});
