import { test, expect } from "@playwright/test";

const DEV_OTP = "1234";
const FINANCE_PHONE = "+998901110002";

/** Log in via live BFF API and inject session cookie (avoids onboarding redirect). */
async function loginViaApiCookie(page: import("@playwright/test").Page, phone: string) {
  const baseURL = process.env.BASE_URL ?? "http://localhost:3000";

  const otpRes = await page.request.post(`${baseURL}/api/auth/otp`, {
    data: { phone, countryCode: "UZ" },
  });
  expect(otpRes.ok()).toBeTruthy();

  const verifyRes = await page.request.post(`${baseURL}/api/auth/verify`, {
    data: { phone, code: DEV_OTP, countryCode: "UZ" },
  });
  expect(verifyRes.ok()).toBeTruthy();

  const setCookie = verifyRes.headers()["set-cookie"] ?? "";
  const tokenMatch = setCookie.match(/agnet_token=([^;]+)/);
  expect(tokenMatch, "Expected agnet_token in Set-Cookie").toBeTruthy();

  await page.context().addCookies([
    {
      name: "agnet_token",
      value: tokenMatch![1]!,
      domain: "localhost",
      path: "/",
      httpOnly: true,
      sameSite: "Lax",
    },
  ]);
}

test.describe("Finance dashboard live verification", () => {
  test("finance page against live core-api", async ({ page }) => {
    test.skip(process.env.CORE_API_USE_MOCK === "true", "Requires live core-api");

    await loginViaApiCookie(page, FINANCE_PHONE);
    await page.setViewportSize({ width: 1440, height: 900 });
    await page.goto("/farmers/dashboard/finance");

    await expect(page.getByTestId("dashboard-header")).toContainText(
      /AGNET Finance|AGNET Moliya|AGNET Финансы/,
    );
    await expect(page.getByTestId("finance-module")).toBeVisible({ timeout: 20_000 });
    await expect(page.getByText("UZB-2024-05-000789")).toBeVisible();
    await expect(page.getByText("Islomjon Abdullaev")).toBeVisible();
    await expect(page.getByText("Agrobank (UZ)").first()).toBeVisible();
    await expect(page.getByText("High").first()).toBeVisible();
    await expect(
      page.getByText(/Bank \/ MFI Routing|Bank \/ MFI yo'naltirish|Маршрутизация банка/),
    ).toBeVisible();
    await expect(page.getByText("Wheat")).toBeVisible();
    await expect(page.getByText("Case Created")).toBeVisible();

    await page.screenshot({
      path: "test-results/finance-live-dashboard.png",
      fullPage: true,
    });
  });
});
