import { ApplicationStatus, WorkflowStage } from "@/data/dummyData"; const LOCAL_KEY = "fo_workflow_overrides"; export interface FoWorkflowOverride { currentStage?: WorkflowStage; status?: ApplicationStatus; assignedFOI?: string; assignedFO?: string; foVisitNotes?: string; } export type EntityType = "hatchery" | "farm"; interface OverridesMap { [compositeId: string]: FoWorkflowOverride; } function getKey(entityType: EntityType, id: string) { return `${entityType}:${id}`; } function readOverrides(): OverridesMap { if (typeof window === "undefined") return {}; try { const raw = localStorage.getItem(LOCAL_KEY); if (!raw) return {}; const parsed = JSON.parse(raw); if (!parsed || typeof parsed !== "object") return {}; return parsed as OverridesMap; } catch { return {}; } } function writeOverrides(map: OverridesMap) { if (typeof window === "undefined") return; try { localStorage.setItem(LOCAL_KEY, JSON.stringify(map)); } catch { // ignore } } export function updateFoWorkflowOverride( entityType: EntityType, id: string, patch: FoWorkflowOverride, ): FoWorkflowOverride { const map = readOverrides(); const key = getKey(entityType, id); const existing = map[key] || {}; const merged: FoWorkflowOverride = { ...existing, ...patch }; map[key] = merged; writeOverrides(map); return merged; } export function getFoWorkflowOverride( entityType: EntityType, id: string, ): FoWorkflowOverride | undefined { const map = readOverrides(); return map[getKey(entityType, id)]; } interface HasFoFields { id: string; entityType: EntityType; currentStage: string; status: string; assignedFOI?: string; assignedFO?: string; } export function applyFoWorkflowOverrides(rows: T[]): T[] { const map = readOverrides(); return rows.map((row) => { const override = map[getKey(row.entityType, row.id)]; if (!override) return row; return { ...row, currentStage: override.currentStage ?? row.currentStage, status: override.status ?? row.status, assignedFOI: override.assignedFOI ?? row.assignedFOI, assignedFO: override.assignedFO ?? row.assignedFO, }; }); }