import "@testing-library/jest-dom/vitest";
import { render, screen } from "@testing-library/react";
import { describe, expect, it, vi } from "vitest";
import { mapDashboardResponse } from "@/lib/farmer-dashboard";
import { DASHBOARD_MOCKUP_PERSONAS } from "@/lib/fixtures/dashboard-mockup-personas";
import InputsModule from "@/components/farmer/modules/InputsModule";

vi.mock("@/lib/i18n", () => ({
  useLocale: () => ({ locale: "en" as const, setLocale: vi.fn() }),
}));

const burkinaInputs = mapDashboardResponse(
  DASHBOARD_MOCKUP_PERSONAS.burkinaInputs,
).inputs!;

describe("InputsModule", () => {
  it("renders KPI row with five cards from mock persona", () => {
    render(<InputsModule data={burkinaInputs} />);

    expect(screen.getByTestId("inputs-module")).toBeInTheDocument();
    expect(screen.getByTestId("inputs-kpi-row")).toBeInTheDocument();
    expect(screen.getByTestId("inputs-kpi-seed")).toHaveTextContent("12");
    expect(screen.getByTestId("inputs-kpi-fertiliser")).toHaveTextContent("8");
    expect(screen.getByTestId("inputs-kpi-equipment")).toHaveTextContent("3");
    expect(screen.getByTestId("inputs-kpi-vouchers")).toHaveTextContent("2");
    expect(screen.getByTestId("inputs-kpi-inTransit")).toHaveTextContent("1");
  });

  it("renders suppliers, catalog tabs, voucher card, and delivery stepper", () => {
    render(<InputsModule data={burkinaInputs} />);

    expect(screen.getByTestId("inputs-supplier-list")).toBeInTheDocument();
    expect(screen.getByTestId("inputs-supplier-agrosupply-uz")).toBeInTheDocument();
    expect(screen.getByTestId("inputs-catalog-tabs")).toBeInTheDocument();
    expect(screen.getByTestId("inputs-catalog-item-seed-cotton-xl")).toBeInTheDocument();
    expect(screen.getByTestId("inputs-voucher-card")).toBeInTheDocument();
    expect(screen.getByText("VCH-2026-8842")).toBeInTheDocument();
    expect(screen.getByTestId("inputs-payment-route-stepper")).toBeInTheDocument();
    expect(screen.getByTestId("inputs-delivery-stepper")).toBeInTheDocument();
    expect(screen.getByTestId("inputs-delivery-map-placeholder")).toBeInTheDocument();
  });

  it("shows empty state when dashboard v2 data is absent", () => {
    render(
      <InputsModule
        data={{
          assets: [],
          recommendedInputs: [],
        }}
      />,
    );

    expect(screen.getByTestId("inputs-empty-state")).toBeInTheDocument();
    expect(screen.queryByTestId("inputs-kpi-row")).not.toBeInTheDocument();
  });
});

describe("inputs dashboard labels", () => {
  it("exposes inputs namespace keys via td()", async () => {
    const { td } = await import("@/lib/i18n/dashboard-labels");
    expect(td("inputsKpiSeed", "en")).toBe("Seed");
    expect(td("inputsDeliveryTitle", "en")).toBe("Delivery Tracking");
    expect(td("inputsVoucherTitle", "uz")).toBeTruthy();
  });
});
