import { expect, test } from "@playwright/test";

test.describe("Allocations", () => {
  test.beforeEach(async ({ page }) => {
    await page.goto("/auth/signin");
    await page.fill('input[type="email"]', "admin@capakraken.dev");
    await page.fill('input[type="password"]', "admin123");
    await page.click('button[type="submit"]');
    await expect(page).toHaveURL(/\/(dashboard|resources)/);
    await page.goto("/allocations");
  });

  test("allocation list loads with table", async ({ page }) => {
    await page.waitForLoadState("networkidle");
    // The page title should be visible
    await expect(
      page.locator("h1").filter({ hasText: /Allocations|Planning/i }),
    ).toBeVisible({ timeout: 10000 });
    // Table or empty state should be present
    await expect(
      page.locator("table").or(page.locator("text=No allocations")),
    ).toBeVisible({ timeout: 10000 });
  });

  test("new planning entry modal opens", async ({ page }) => {
    await page.waitForLoadState("networkidle");
    const newBtn = page.locator("button", { hasText: /New Planning Entry/i });
    await expect(newBtn).toBeVisible({ timeout: 10000 });
    await newBtn.click();
    // Modal should appear with form fields
    await expect(
      page.locator("[role='dialog']").or(page.locator("text=Create").or(page.locator("text=Project"))),
    ).toBeVisible({ timeout: 5000 });
    await page.keyboard.press("Escape");
  });

  test("filter by status works", async ({ page }) => {
    await page.waitForLoadState("networkidle");
    // Look for status filter chips or dropdown
    const statusFilter = page.locator("button", { hasText: /Proposed|Confirmed|Active|Status/i }).first();
    if ((await statusFilter.count()) > 0) {
      await statusFilter.click();
      await page.waitForTimeout(300);
      // After clicking a status filter, the page should still show the table
      await expect(
        page.locator("table").or(page.locator("text=No allocations")),
      ).toBeVisible();
    }
  });

  test("column toggle panel works", async ({ page }) => {
    await page.waitForLoadState("networkidle");
    const colToggle = page.locator("button", { hasText: /Columns/i });
    if ((await colToggle.count()) > 0) {
      await colToggle.click();
      await page.waitForTimeout(300);
      // A panel or dropdown with column checkboxes should appear
      await expect(
        page.locator("input[type='checkbox']").first(),
      ).toBeVisible({ timeout: 3000 });
      await page.keyboard.press("Escape");
    }
  });
});
