import type { OnboardingStepData, StepAccountData } from "@/lib/api-types";

export interface FarmerRoutingAuth {
  activeSession?: {
    id?: string;
    status?: string;
    stepData?: OnboardingStepData;
  } | null;
}

function sessionStepData(auth: FarmerRoutingAuth): OnboardingStepData | undefined {
  return auth.activeSession?.stepData;
}

/** Whether the farmer chose to finish onboarding later (after KYC). */
export function isWizardDeferred(auth: FarmerRoutingAuth): boolean {
  const sd = sessionStepData(auth);
  const account = sd?.ACCOUNT as (StepAccountData & { wizardDeferred?: boolean }) | undefined;
  const kyc = sd?.KYC as { wizardDeferred?: boolean } | undefined;
  return Boolean(account?.wizardDeferred || kyc?.wizardDeferred);
}

/** Whether an onboarding session can be resumed from the wizard. */
export function canContinueOnboarding(auth: FarmerRoutingAuth): boolean {
  const status = auth.activeSession?.status;
  return status === "in_progress" || status === "submitted" || status === "scoring";
}

/** Post-login destination based on active onboarding session status. */
export function resolveFarmerDestination(auth: FarmerRoutingAuth): string {
  const session = auth.activeSession;
  if (!session?.status) return "/farmers/onboarding";

  const { status } = session;
  if (status === "in_progress") {
    return isWizardDeferred(auth) ? "/farmers/dashboard" : "/farmers/onboarding";
  }
  if (status === "submitted" || status === "scoring" || status === "completed") {
    return "/farmers/dashboard";
  }
  return "/farmers/apply";
}

/** Whether the farmer may start a new application after a completed session. */
export function canStartReapplication(auth: FarmerRoutingAuth): boolean {
  return auth.activeSession?.status === "completed";
}
