import type { Location } from "@/domain/locations/types/location"; import type { CompDocSiteInfo } from "@/domain/work-orders/types/completion-doc"; import type { WorkOrderTableRow } from "@/domain/work-orders/types/work-order-table-row"; import { effectiveSite } from "@/domain/work-orders/utils/effective-completion-snapshot"; function buildLabel(city?: string, state?: string): string { return [city, state].filter(Boolean).join(", "); } function toCompDocSite(street: string, city: string, state: string, zip: string): CompDocSiteInfo { const label = buildLabel(city, state); const fullAddress = [street, label, zip].filter(Boolean).join(", ") || "—"; return { street, city, state, zip, label, fullAddress }; } function resolveLiveLocationSite(location: Location): CompDocSiteInfo { return toCompDocSite( location.address ?? "", location.city ?? "", location.state ?? "", location.zipCode ?? "", ); } function resolveRowLocationSite(row: Pick): CompDocSiteInfo { const locationParts = row.location.split(",").map((part) => part.trim()); const city = locationParts[0] ?? ""; const state = locationParts[1] ?? ""; const label = buildLabel(city, state); const street = row.location && !label ? row.location : ""; return toCompDocSite(street, city, state, ""); } export function resolveCompDocSite( row: Pick, location?: Location | null, ): CompDocSiteInfo { const frozen = effectiveSite(row); if (frozen != null) { return toCompDocSite( frozen.address ?? "", frozen.city ?? "", frozen.state ?? "", frozen.zip ?? "", ); } if (location?.address || location?.city) { return resolveLiveLocationSite(location); } return resolveRowLocationSite(row); }