import { test, expect } from "@playwright/test";
import { mockTauriFullSession, navigateToMainPage } from "./helpers";

// ---------------------------------------------------------------------------
// Tests: Message Input
// ---------------------------------------------------------------------------

test.describe("Message Input", () => {
  test.beforeEach(async ({ page }) => {
    await mockTauriFullSession(page);
    await page.goto("/");
    await navigateToMainPage(page);
  });

  test("message input area is visible", async ({ page }) => {
    const inputWrap = page.locator("[data-testid='message-input']");
    await expect(inputWrap).toBeAttached();
  });

  test("textarea is present and focusable", async ({ page }) => {
    const textarea = page.locator("[data-testid='msg-textarea']");
    await expect(textarea).toBeAttached();

    await textarea.focus();
    await expect(textarea).toBeFocused();
  });

  test("textarea has placeholder containing channel name 'general'", async ({ page }) => {
    const textarea = page.locator("[data-testid='msg-textarea']");
    const placeholder = await textarea.getAttribute("placeholder");
    expect(placeholder).toBe("Message #general");
  });

  test("send button exists with arrow icon", async ({ page }) => {
    const sendBtn = page.locator("[data-testid='send-btn']");
    await expect(sendBtn).toBeAttached();
    // Send button uses an SVG icon (createIcon("send")) instead of text
    const svgIcon = sendBtn.locator("svg");
    await expect(svgIcon).toBeAttached();
  });

  test("emoji button exists", async ({ page }) => {
    const emojiBtn = page.locator(".emoji-btn");
    await expect(emojiBtn).toBeAttached();
  });

  test("attach button exists", async ({ page }) => {
    const attachBtn = page.locator(".attach-btn");
    await expect(attachBtn).toBeAttached();
  });

  test("typing in textarea updates its value", async ({ page }) => {
    const textarea = page.locator("[data-testid='msg-textarea']");
    await textarea.fill("Hello, this is a test message");
    await expect(textarea).toHaveValue("Hello, this is a test message");

    // Verify clearing also works
    await textarea.fill("");
    await expect(textarea).toHaveValue("");
  });

  test("reply bar is hidden by default", async ({ page }) => {
    const replyBar = page.locator(".reply-bar").first();
    // Reply bar should exist but not have visible class
    await expect(replyBar).toBeAttached();
    await expect(replyBar).not.toHaveClass(/visible/);
  });
});
