export type CanvasPsdTemplatePendingImage = { id: string; imageUrl: string; title?: string | null; }; export type CanvasPsdTemplateLaunchPayload = { brandName: string; pendingImages: CanvasPsdTemplatePendingImage[]; activeImageId?: string | null; returnTo?: string | null; templateMode?: "main" | "sku" | null; createdAt: number; }; const STORAGE_PREFIX = "canvas-psd-template-launch:"; export function getCanvasPsdTemplateLaunchStorageKey(token: string) { return `${STORAGE_PREFIX}${token}`; } export function createCanvasPsdTemplateLaunchToken() { if (typeof crypto !== "undefined" && typeof crypto.randomUUID === "function") { return crypto.randomUUID(); } return `launch-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`; } export function saveCanvasPsdTemplateLaunchPayload( token: string, payload: CanvasPsdTemplateLaunchPayload ) { if (typeof window === "undefined") { return; } window.sessionStorage.setItem( getCanvasPsdTemplateLaunchStorageKey(token), JSON.stringify(payload) ); } export function readCanvasPsdTemplateLaunchPayload( token: string ): CanvasPsdTemplateLaunchPayload | null { if (typeof window === "undefined") { return null; } const raw = window.sessionStorage.getItem( getCanvasPsdTemplateLaunchStorageKey(token) ); if (!raw) { return null; } try { const parsed = JSON.parse(raw) as Partial | null; const pendingImages = Array.isArray(parsed?.pendingImages) ? parsed.pendingImages .map((item) => ({ id: String(item?.id || "").trim(), imageUrl: String(item?.imageUrl || "").trim(), title: String(item?.title || "").trim() || null, })) .filter((item) => item.id && item.imageUrl) : []; const brandName = String(parsed?.brandName || "").trim(); if (!brandName || pendingImages.length === 0) { return null; } return { brandName, pendingImages, activeImageId: String(parsed?.activeImageId || "").trim() || pendingImages[0]?.id || null, returnTo: String(parsed?.returnTo || "").trim() || null, templateMode: parsed?.templateMode === "sku" ? "sku" : parsed?.templateMode === "main" ? "main" : null, createdAt: typeof parsed?.createdAt === "number" && Number.isFinite(parsed.createdAt) ? parsed.createdAt : Date.now(), }; } catch { return null; } } export function removeCanvasPsdTemplateLaunchPayload(token: string) { if (typeof window === "undefined") { return; } window.sessionStorage.removeItem(getCanvasPsdTemplateLaunchStorageKey(token)); }