export const UNBOUND_PATH_CLIENT = "—" export interface ServicePathLabelInput { clientId: string clientName: string viaId: string viaName: string enId: string enName: string serviceId: string } export interface ServicePathLabelNames { viaName?: string viaSite?: string enName?: string serviceLabel?: string } export function isUnboundServicePath(p: Pick): boolean { return p.clientId === UNBOUND_PATH_CLIENT || p.clientName === UNBOUND_PATH_CLIENT } export function formatServicePathLabel( p: ServicePathLabelInput, viaMode: "via" | "service", names: ServicePathLabelNames = {}, ): string { const viaName = names.viaName || p.viaName const enName = names.enName || p.enName if (isUnboundServicePath(p)) { if (p.viaId !== p.enId) return `${viaName} → ${enName}` return `${enName} · без привязки` } const viaLabel = names.viaSite || p.viaName const mid = viaMode === "via" ? viaLabel : (names.serviceLabel || p.serviceId) return `${p.clientName} · ${mid}` } export function formatServicePathTitle(label: string, serviceLabel: string): string { const svc = serviceLabel.trim() if (!svc) return label if (label.includes(svc)) return label return `${label} · ${svc}` }