import { describe, expect, it } from "vitest";
import {
  canContinueOnboarding,
  isWizardDeferred,
  resolveFarmerDestination,
} from "@/lib/farmer-routing";

describe("resolveFarmerDestination", () => {
  it("routes to onboarding when activeSession is missing", () => {
    expect(resolveFarmerDestination({})).toBe("/farmers/onboarding");
    expect(resolveFarmerDestination({ activeSession: null })).toBe("/farmers/onboarding");
  });

  it("routes non-deferred in_progress session to onboarding", () => {
    expect(resolveFarmerDestination({ activeSession: { status: "in_progress" } })).toBe(
      "/farmers/onboarding",
    );
  });

  it("routes deferred in_progress session to dashboard", () => {
    expect(
      resolveFarmerDestination({
        activeSession: {
          status: "in_progress",
          stepData: { ACCOUNT: { wizardDeferred: true, phone: "+998901234567", verified: true } },
        },
      }),
    ).toBe("/farmers/dashboard");
  });

  it("routes to dashboard when status is submitted, scoring, or completed", () => {
    expect(resolveFarmerDestination({ activeSession: { status: "submitted" } })).toBe(
      "/farmers/dashboard",
    );
    expect(resolveFarmerDestination({ activeSession: { status: "scoring" } })).toBe(
      "/farmers/dashboard",
    );
    expect(resolveFarmerDestination({ activeSession: { status: "completed" } })).toBe(
      "/farmers/dashboard",
    );
  });

  it("routes to apply for unknown statuses", () => {
    expect(resolveFarmerDestination({ activeSession: { status: "draft" } })).toBe("/farmers/apply");
    expect(resolveFarmerDestination({ activeSession: { status: "rejected" } })).toBe(
      "/farmers/apply",
    );
  });
});

describe("isWizardDeferred", () => {
  it("reads wizardDeferred from ACCOUNT step data", () => {
    expect(
      isWizardDeferred({
        activeSession: {
          status: "in_progress",
          stepData: { ACCOUNT: { wizardDeferred: true, phone: "+998", verified: true } },
        },
      }),
    ).toBe(true);
  });

  it("reads wizardDeferred from KYC step data", () => {
    expect(
      isWizardDeferred({
        activeSession: {
          status: "in_progress",
          stepData: { KYC: { wizardDeferred: true } },
        },
      }),
    ).toBe(true);
  });
});

describe("canContinueOnboarding", () => {
  it("returns true for in_progress, submitted, and scoring", () => {
    expect(canContinueOnboarding({ activeSession: { status: "in_progress" } })).toBe(true);
    expect(canContinueOnboarding({ activeSession: { status: "submitted" } })).toBe(true);
    expect(canContinueOnboarding({ activeSession: { status: "scoring" } })).toBe(true);
  });

  it("returns false for completed or missing session", () => {
    expect(canContinueOnboarding({ activeSession: { status: "completed" } })).toBe(false);
    expect(canContinueOnboarding({})).toBe(false);
  });
});
