export type ImportRunLifecycle = { label: string; tone: "info" | "success" | "warning" | "inactive"; canApply: boolean; canRollback: boolean; guidance: string; }; export function importRunIdFromSearch(search: URLSearchParams): string { return search.get("import_run")?.trim() ?? ""; } export function withImportRunSearch(search: URLSearchParams, runId?: string | null): URLSearchParams { const next = new URLSearchParams(search); const normalized = runId?.trim(); if (normalized) next.set("import_run", normalized); else next.delete("import_run"); return next; } export function importRunLifecycle(status: string): ImportRunLifecycle { if (status === "previewed") { return { label: "Ready for review", tone: "info", canApply: true, canRollback: false, guidance: "Review the persisted effects and diagnostics before applying this plan." }; } if (status === "applied") { return { label: "Applied", tone: "success", canApply: false, canRollback: true, guidance: "The plan has already been applied. Rollback remains guarded by its recorded plan hash and contact evidence." }; } if (status === "rolled_back") { return { label: "Rolled back", tone: "inactive", canApply: false, canRollback: false, guidance: "This run was rolled back and cannot be applied again. Create a new preview to import the source again." }; } if (status === "expired") { return { label: "Expired", tone: "warning", canApply: false, canRollback: false, guidance: "This preview is no longer actionable. Create a new preview from the original source." }; } return { label: status || "Unavailable", tone: "warning", canApply: false, canRollback: false, guidance: "This run is not actionable in its current lifecycle state." }; } export function unavailableImportRunMessage(status?: number): string { if (status === 404 || status === 410) { return "This import run is missing, expired, or not available to your tenant. No source data was loaded."; } return "The persisted import run could not be loaded. Reload it after the service becomes available."; }