import type { MarriageProfileResponse } from "@/hooks/marriage/types"; import { clearLegacyMatchSubmittedFlag, isWithinMatchStartGrace, } from "./match-start-grace"; export function getSubmitPath(profile: MarriageProfileResponse | undefined) { clearLegacyMatchSubmittedFlag(); if (!profile) { return "/intro"; } const activeCase = profile.active_case; if (activeCase) { const caseStatus = activeCase.status; const myAction = activeCase.my_action; const isFemale = profile.gender === "female"; if ( caseStatus === "payment_done" || caseStatus === "finalized" || caseStatus === "contacted" ) { if (isFemale) { return "/candidate-contact"; } return "/request-accepted"; } if (caseStatus === "payment_pending" || caseStatus === "female_accepted") { if (isFemale) { return "/candidate-contact"; } return "/request-accepted"; } if (caseStatus === "male_accepted") { if (myAction === "pending") { return "/new-match"; } return "/request-sent"; } if (caseStatus === "introduced") { if (myAction === "pending") { return "/new-match"; } return "/finding-match"; } // male_rejected / female_rejected / dismissed – the case is over, the user // goes back to waiting for the next match. return "/finding-match"; } if (profile.status === "pending_onboarding") { return "/terms"; } if (profile.status === "waiting") { return "/finding-match"; } if (profile.status === "matched") { return "/request-accepted"; } if (profile.status === "in_case") { return "/finding-match"; } if (profile.status === "pending_info") { // The backend may still report pending_info for a moment right after the // match request is sent, so honour a short grace window to avoid bouncing // the user back into the questions list. return isWithinMatchStartGrace() ? "/finding-match" : "/questions-list"; } return "/terms"; }