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

const ADMIN_PASSWORD = process.env.ADMIN_PASSWORD || "cleanserp-admin-2026";

test.describe("Admin panel", () => {
  test("login page loads", async ({ page }) => {
    await page.goto("/admin/login");
    await expect(page.locator("h1")).toContainText("CleanSerp Admin");
    await expect(page.locator('input[name="password"]')).toBeVisible();
  });

  test("wrong password shows error", async ({ page }) => {
    await page.goto("/admin/login");
    await page.fill('input[name="password"]', "wrong");
    await page.click('button[type="submit"]');
    await expect(page.locator("text=Mot de passe incorrect")).toBeVisible();
  });

  test("correct password redirects to dashboard", async ({ page }) => {
    await page.goto("/admin/login");
    await page.fill('input[name="password"]', ADMIN_PASSWORD);
    await page.click('button[type="submit"]');
    await page.waitForURL("**/admin");
    await expect(page.locator("h1")).toContainText("Dashboard");
  });

  test("dashboard shows stats", async ({ page }) => {
    // Login first
    await page.goto("/admin/login");
    await page.fill('input[name="password"]', ADMIN_PASSWORD);
    await page.click('button[type="submit"]');
    await page.waitForURL("**/admin");

    // Check stat cards
    await expect(page.locator("text=Total shops")).toBeVisible();
    await expect(page.locator("text=Actifs")).toBeVisible();
    await expect(page.locator("text=Erreurs (24h)")).toBeVisible();
  });

  test("shops page loads", async ({ page }) => {
    await page.goto("/admin/login");
    await page.fill('input[name="password"]', ADMIN_PASSWORD);
    await page.click('button[type="submit"]');
    await page.waitForURL("**/admin");

    await page.click("text=Shops");
    await expect(page.locator("h1")).toContainText("Shops");
  });

  test("logs page loads", async ({ page }) => {
    await page.goto("/admin/login");
    await page.fill('input[name="password"]', ADMIN_PASSWORD);
    await page.click('button[type="submit"]');
    await page.waitForURL("**/admin");

    await page.click("text=Logs");
    await expect(page.locator("h1")).toContainText("Logs");
  });

  test("config page loads", async ({ page }) => {
    await page.goto("/admin/login");
    await page.fill('input[name="password"]', ADMIN_PASSWORD);
    await page.click('button[type="submit"]');
    await page.waitForURL("**/admin");

    await page.click("text=Config");
    await expect(page.locator("h1")).toContainText("Configuration");
  });

  test("unauthenticated access redirects to login", async ({ page }) => {
    await page.goto("/admin");
    await expect(page).toHaveURL(/.*\/admin\/login/);
  });

  test("logout works", async ({ page }) => {
    await page.goto("/admin/login");
    await page.fill('input[name="password"]', ADMIN_PASSWORD);
    await page.click('button[type="submit"]');
    await page.waitForURL("**/admin");

    await page.click("text=Deconnexion");
    await expect(page).toHaveURL(/.*\/admin\/login/);
  });
});
