import { test, expect } from "@playwright/test";
import {
  authenticateViaApply,
  completeAccountStep,
  completeFullWizard,
  uniqueTestPhone,
  loginAfterWizard,
  loginAsDemoFarmer,
  DASHBOARD_MODULES,
  AGNET_FINANCE,
  AGNET_TRADE,
  AGNET_IDENTITY,
  AGNET_INPUTS,
} from "../helpers/wizard";

test.describe("Farmer Dashboard", () => {
  test("completed onboarding → login → lands on /farmers/dashboard", async ({ page }) => {
    const phone = uniqueTestPhone();
    await completeFullWizard(page, phone);

    // Now on login page with registered=1 banner
    await expect(page.locator("h1")).toContainText("Welcome to AGNET");

    await loginAfterWizard(page, phone);
    await expect(page.getByText(DASHBOARD_MODULES)).toBeVisible({ timeout: 20_000 });
  });

  test("in-progress session → login → lands on /farmers/onboarding", async ({ page }) => {
    const phone = uniqueTestPhone();
    await authenticateViaApply(page, phone);
    await completeAccountStep(page, phone);

    // Navigate to login page manually (simulate returning user)
    await page.goto("/farmers/login");

    // Already authenticated with in_progress session — should redirect
    await page.waitForURL("**/farmers/onboarding", { timeout: 20_000 });
  });

  test("dashboard hub shows 4 module cards", async ({ page }) => {
    const phone = uniqueTestPhone();
    await completeFullWizard(page, phone);

    // Login
    await loginAfterWizard(page, phone);

    await expect(page.getByText(AGNET_FINANCE)).toBeVisible();
    await expect(page.getByText(AGNET_TRADE)).toBeVisible();
    await expect(page.getByText(AGNET_IDENTITY)).toBeVisible();
    await expect(page.getByText(AGNET_INPUTS)).toBeVisible();
  });

  test("finance card navigates to /farmers/dashboard/finance", async ({ page }) => {
    const phone = uniqueTestPhone();
    await completeFullWizard(page, phone);

    await loginAfterWizard(page, phone);

    await page.getByText(AGNET_FINANCE).click();
    await page.waitForURL("**/farmers/dashboard/finance", { timeout: 15_000 });
    await expect(page.getByTestId("dashboard-header")).toContainText(/AGNET Finance|AGNET Moliya|AGNET Финансы/);
    await expect(page.getByText(/Case ID|ID дела|Case ID/)).toBeVisible();
  });

  test("sidebar nav switches modules via data-testid", async ({ page }) => {
    const phone = uniqueTestPhone();
    await completeFullWizard(page, phone);
    await loginAfterWizard(page, phone);

    await page.setViewportSize({ width: 1440, height: 900 });
    await expect(page.getByTestId("dashboard-sidebar")).toBeVisible();

    await page.getByTestId("dashboard-sidebar").getByTestId("dashboard-nav-identity").click();
    await page.waitForURL("**/farmers/dashboard/identity", { timeout: 15_000 });
    await expect(page.getByTestId("dashboard-header")).toContainText(/AGNET Identity|AGNET Identifikatsiya|AGNET Идентификация/);

    await page.getByTestId("dashboard-sidebar").getByTestId("dashboard-nav-finance").click();
    await page.waitForURL("**/farmers/dashboard/finance", { timeout: 15_000 });
    await expect(page.getByTestId("dashboard-header")).toContainText(/AGNET Finance|AGNET Moliya|AGNET Финансы/);
  });

  test("finance page shows data from onboarding", async ({ page }) => {
    const phone = uniqueTestPhone();
    await completeFullWizard(page, phone);

    await loginAfterWizard(page, phone);

    await page.goto("/farmers/dashboard/finance");
    await expect(page.getByText(/Case ID|ID дела/)).toBeVisible({ timeout: 15_000 });
    await expect(page.getByText(/Approval Path|Tasdiqlash yo'li|Путь одобрения/)).toBeVisible();
    await expect(page.getByText(/AGN-FIN-/)).toBeVisible();
  });

  test("identity page renders v2 layout for islomjon demo persona", async ({ page }) => {
    await loginAsDemoFarmer(page, "+998901110001");
    await page.setViewportSize({ width: 1440, height: 900 });
    await page.goto("/farmers/dashboard/identity");

    await expect(page.getByTestId("dashboard-header")).toContainText(/AGNET Identity|AGNET Identifikatsiya|AGNET Идентификация/);
    await expect(page.getByTestId("dashboard-gis-verified")).toBeVisible();
    await expect(page.getByTestId("identity-module")).toBeVisible({ timeout: 15_000 });
    await expect(page.getByText("AGID-FMR-00142")).toBeVisible();
    await expect(page.getByTestId("identity-gis-card")).toBeVisible();
    await expect(page.getByTestId("identity-ekyc-card")).toBeVisible();
    await expect(page.getByTestId("identity-compliance-banner")).toBeVisible();
  });

  test("finance module renders v2 layout for agrobank demo persona", async ({ page }) => {
    await loginAsDemoFarmer(page, "+998901110002");
    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: 15_000 });
    await expect(page.getByText("UZB-2024-05-000789")).toBeVisible();
    await expect(page.getByText("Islomjon Abdullaev")).toBeVisible();
    await expect(page.getByTestId("finance-farmer-farm-card")).toBeVisible();
    await expect(page.getByText(/Bank \/ MFI Routing|Bank \/ MFI yo'naltirish|Маршрутизация банка/)).toBeVisible();
  });
});
