export const materialEventItems = [ { key: "tente3x3", label: "Tente 3*3" }, { key: "chapiteau5x5", label: "Chapiteau 5*5" }, { key: "podium", label: "Podium" }, { key: "autres", label: "Autres" }, ] as const; export const materialEventInventory: Record<(typeof materialEventItems)[number]["key"], number | null> = { tente3x3: 12, chapiteau5x5: 6, podium: 2, autres: null, }; export const materialEventReplacementValues: Record<(typeof materialEventItems)[number]["key"], number | null> = { tente3x3: 45000, chapiteau5x5: 120000, podium: 250000, autres: null, }; export type MaterialEventItemKey = (typeof materialEventItems)[number]["key"]; export type MaterialEventSelection = Record; export type MaterialEventQuantities = Record; export type MaterialEventQuantityMap = Record; export const emptyMaterialEventSelection = (): MaterialEventSelection => ({ tente3x3: false, chapiteau5x5: false, podium: false, autres: false, }); export const emptyMaterialEventQuantities = (): MaterialEventQuantities => ({ tente3x3: "", chapiteau5x5: "", podium: "", autres: "", }); export function getMaterialEventLabel(key: MaterialEventItemKey | string) { return materialEventItems.find((item) => item.key === key)?.label || String(key); } export function parseMaterialEventQuantity(value: unknown) { const parsed = Number.parseInt(String(value ?? "").trim(), 10); return Number.isFinite(parsed) && parsed > 0 ? parsed : 0; } export function emptyMaterialEventQuantityMap(initialValue: number = 0): MaterialEventQuantityMap { return { tente3x3: initialValue, chapiteau5x5: initialValue, podium: initialValue, autres: initialValue, }; } export function sanitizeMaterialEventQuantityMap(rawValue: unknown): MaterialEventQuantityMap { const next = emptyMaterialEventQuantityMap(); if (!rawValue || typeof rawValue !== "object") { return next; } for (const item of materialEventItems) { const value = (rawValue as Record)[item.key]; next[item.key] = parseMaterialEventQuantity(value); } return next; }