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

test("the root route opens the unified Arabic login", async ({ page }) => {
  await page.goto("/");
  await expect(page).toHaveURL(/\/login$/);
  await expect(page.locator("html")).toHaveAttribute("dir", "rtl");
  await expect(page.getByRole("heading", { level: 1, name: "تسجيل دخول المسؤول والمتبرع" })).toBeVisible();
  await expect(page.locator("header, footer")).toHaveCount(0);
});

test("removed public marketing routes return 404", async ({ page }) => {
  for (const path of ["/about", "/contact", "/how-it-works", "/privacy", "/terms", "/available-orphans", "/request-sponsorship"]) {
    const response = await page.goto(path);
    expect(response?.status(), path).toBe(404);
  }
});

test("health check and private dashboard routing work", async ({ page, request }) => {
  const health = await request.get("/api/health");
  expect(health.ok()).toBe(true);
  await page.goto("/admin");
  await expect(page).toHaveURL(/\/login\?next=%2Fadmin|\/login\?next=\/admin/);
  await page.goto("/donor");
  await expect(page).toHaveURL(/\/login\?next=%2Fdonor|\/login\?next=\/donor/);
  await page.goto("/admin-login");
  await expect(page).toHaveURL(/\/login$/);
});

test("one login form accepts admin email or donor phone", async ({ page, request }) => {
  const health = await request.get("/api/health");
  const status = (await health.json()) as { databaseConfigured: boolean };
  await page.goto("/login");
  const submit = page.getByRole("button", { name: "تسجيل الدخول" });

  await expect(page.getByRole("heading", { level: 1, name: "تسجيل دخول المسؤول والمتبرع" })).toBeVisible();
  await expect(page.getByLabel("البريد الإلكتروني أو رقم الهاتف")).toBeVisible();
  await expect(page.getByLabel("بريد المسؤول")).toHaveCount(0);

  if (!status.databaseConfigured) {
    await expect(page.getByText("يلزم إضافة مفتاح Supabase العام إلى إعدادات الخادم قبل تسجيل الدخول.")).toBeVisible();
    await expect(submit).toBeDisabled();
    return;
  }

  const identifier = page.getByLabel("البريد الإلكتروني أو رقم الهاتف");
  await identifier.fill("+249000000000");
  await page.getByLabel("كلمة المرور").fill("fictional-password");
  await submit.click();
  await expect(page.getByText("البريد الإلكتروني أو رقم الهاتف أو كلمة المرور غير صحيحة")).toBeVisible();

  await identifier.fill("missing-admin@example.org");
  await submit.click();
  await expect(page.getByText("البريد الإلكتروني أو رقم الهاتف أو كلمة المرور غير صحيحة")).toBeVisible();
});

for (const width of [320, 375, 390, 430, 768, 1440]) {
  test(`login fits a ${width}px viewport`, async ({ page }) => {
    await page.setViewportSize({ width, height: width < 600 ? 760 : 900 });
    await page.goto("/login");
    const dimensions = await page.evaluate(() => ({
      viewport: document.documentElement.clientWidth,
      page: document.documentElement.scrollWidth
    }));
    expect(dimensions.page).toBeLessThanOrEqual(dimensions.viewport);
    await expect(page.getByLabel("البريد الإلكتروني أو رقم الهاتف")).toBeInViewport();
    await expect(page.getByRole("button", { name: "تسجيل الدخول" })).toBeInViewport();
  });
}
