"use client"; // Survives navigating away from /checkout and back (e.g. to double-check // something in /cart) — same localStorage approach as lib/cart.ts/ // lib/discount.ts, but plain read/write functions rather than // useSyncExternalStore: CheckoutContent is this draft's only reader, so // there's no cross-component subscription to keep in sync the way the cart // needs (Navbar + CartContent + CheckoutContent all read it at once). // Deliberately excludes `password` — that field stays a plain uncontrolled // input, never persisted. const DRAFT_KEY = "ep_checkout_draft"; export type CheckoutDraft = { firstName: string; lastName: string; email: string; // Optional B2B fields — see CheckoutContent.tsx's own comment on why // they sit here (right next to the Rechnungsadresse fields, not a // separate persisted concept). companyName: string; vatId: string; // Rechnungsadresse is always a plain street address now — no // deliveryMethod/packstationNumber/postNumber here, only on the // shipping* override fields below (see CheckoutContent.tsx). street: string; zip: string; city: string; country: string; hasDifferentShippingAddress: boolean; shippingFirstName: string; shippingLastName: string; shippingDeliveryMethod: "address" | "packstation"; shippingStreet: string; shippingPackstationNumber: string; shippingPostNumber: string; shippingZip: string; shippingCity: string; shippingCountry: string; shippingCompanyName: string; shippingContactEmail: string; shippingContactPhone: string; newsletterOptIn: boolean; shippingMethodId: number | null; paymentMethodId: number | null; }; export function readCheckoutDraft(): Partial | null { if (typeof window === "undefined") return null; try { const raw = window.localStorage.getItem(DRAFT_KEY); return raw ? JSON.parse(raw) : null; } catch { return null; } } export function writeCheckoutDraft(draft: CheckoutDraft) { try { window.localStorage.setItem(DRAFT_KEY, JSON.stringify(draft)); } catch { // localStorage unavailable (private browsing etc.) — the draft just // doesn't persist this time, same best-effort fallback as // lib/order.ts's sessionStorage write. } } // Called once an order actually completes (handleSubmit) — a leftover // draft from a finished purchase would otherwise pre-fill the next one. export function clearCheckoutDraft() { try { window.localStorage.removeItem(DRAFT_KEY); } catch { // ignore } }