export type SellUnit = 'unit' | 'kilo' export type ProductCategoryRef = { id: string nameFa: string nameEn: string parentId?: string | null } export type ProductOptionValue = { id: string flavorId: string amount: string price: number flavor?: { id: string nameFa: string nameEn: string } } export type ProductGalleryImage = { id?: string url: string storageKey: string sortOrder?: number } export type Product = { id: string nameFa: string nameEn: string price: number sellUnit: SellUnit categoryId: string category: ProductCategoryRef intro?: string description?: string tags?: string[] mainImageUrl: string | null mainImageKey?: string | null gallery?: ProductGalleryImage[] options: ProductOptionValue[] } export const productImagePlaceholder = 'data:image/svg+xml,' + encodeURIComponent( ` محصول `, ) function optionId() { return `${Date.now()}-${Math.random().toString(36).slice(2, 7)}` } export function createProductOptionValue( flavorId: string, amount: string, price: number, ): ProductOptionValue { return { id: optionId(), flavorId, amount, price, } } const sellUnitLabel: Record = { unit: 'واحد', kilo: 'کیلو', } export function formatPriceParts(product: Product): { amount: string label: string } { return { amount: product.price.toLocaleString('fa-IR'), label: `تومان - ${sellUnitLabel[product.sellUnit]}`, } } export function productImageSrc(product: Product) { return product.mainImageUrl || productImagePlaceholder }