export interface PlannerUiState {
  selectedStepId?: string;
  editStepId?: string;
  isEditingTrip?: boolean;
}

export const getPlannerUiStorageKey = (tripId: string) => `triptale:planner-ui:${tripId}`;

export function readPlannerUiState(storage: Storage, tripId: string): PlannerUiState {
  try {
    const value = storage.getItem(getPlannerUiStorageKey(tripId));
    return value ? JSON.parse(value) as PlannerUiState : {};
  } catch {
    storage.removeItem(getPlannerUiStorageKey(tripId));
    return {};
  }
}

export function updatePlannerUiState(storage: Storage, tripId: string, patch: Partial<PlannerUiState>) {
  const next = { ...readPlannerUiState(storage, tripId), ...patch };
  for (const key of Object.keys(next) as (keyof PlannerUiState)[]) {
    if (next[key] === undefined || next[key] === false) delete next[key];
  }
  const storageKey = getPlannerUiStorageKey(tripId);
  if (Object.keys(next).length === 0) storage.removeItem(storageKey);
  else storage.setItem(storageKey, JSON.stringify(next));
  return next;
}
