import type { Product } from '@/models/products' import { usePriceWithoutType } from '@/utils/usePrice' type LimitProduct = Pick | null | undefined export function productOrderLimitEnabled(product?: LimitProduct): boolean { if (!product?.order_limit_enabled) return false return product.min_order_cash != null || product.max_order_cash != null } export function productMinOrderCash(product?: LimitProduct, isBuy = true, defaultBuyMin = 500_000): number { if (productOrderLimitEnabled(product) && product?.min_order_cash != null) { return Number(product.min_order_cash) } return isBuy ? defaultBuyMin : 0 } export function productMaxOrderCash(product?: LimitProduct): number | undefined { if (productOrderLimitEnabled(product) && product?.max_order_cash != null) { return Number(product.max_order_cash) } return undefined } export function productCashValidationMessage( product: LimitProduct, goldCash: number | string | undefined, isBuy: boolean, formatPrice: (value: number) => string = usePriceWithoutType ): string { if (goldCash === '' || goldCash === undefined) return '' const cash = Number(goldCash ?? 0) const min = productMinOrderCash(product, isBuy) const max = productMaxOrderCash(product) if (max != null && cash > max) { return `حداکثر مبلغ این محصول ${formatPrice(max)} ریال است` } if (min > 0 && cash < min) { if (productOrderLimitEnabled(product) && product?.min_order_cash != null) { return `حداقل مبلغ این محصول ${formatPrice(min)} ریال است` } return `حداقل مبلغ طلا جهت ${isBuy ? 'خرید' : 'فروش'} ${formatPrice(min)} ریال می باشد.` } return '' } export function validateProductOrderLimitForm(form: { order_limit_enabled?: boolean min_order_cash?: number | string | null max_order_cash?: number | string | null }): string | null { if (!form.order_limit_enabled) return null const min = form.min_order_cash const max = form.max_order_cash const hasMin = min != null && min !== '' const hasMax = max != null && max !== '' if (!hasMin && !hasMax) { return 'با فعال بودن محدودیت مبلغ سفارش، حداقل یکی از حداقل یا حداکثر مبلغ باید وارد شود' } if (hasMin && hasMax && Number(min) > Number(max)) { return 'حداقل مبلغ نمی‌تواند بیشتر از حداکثر باشد' } return null }