import { parseNumericValue, sanitizeNumericString } from '@core/utils/convert' /** پارس مبلغ محدودیت سفارش — ارقام فارسی/عربی و جداکننده هزارگان */ export function parseOrderLimitCashValue(value: unknown): number | undefined { if (value === undefined || value === null || value === '') { return undefined } const raw = sanitizeNumericString(value, { allowDecimal: false }) if (raw === '') { return undefined } const num = parseNumericValue(raw) if (!Number.isFinite(num) || num < 0) { return undefined } return Math.trunc(num) } function orderLimitInputsPresent(form: { min_order_cash?: number | string | null max_order_cash?: number | string | null }): boolean { return ( (form.min_order_cash != null && form.min_order_cash !== '') || (form.max_order_cash != null && form.max_order_cash !== '') ) } export function validateProductOrderLimitForm(form: { order_limit_enabled?: boolean min_order_cash?: number | string | null max_order_cash?: number | string | null }): string | null { const enabled = !!form.order_limit_enabled || orderLimitInputsPresent(form) if (!enabled) return null const rawMin = form.min_order_cash const rawMax = form.max_order_cash const hasMinInput = rawMin != null && rawMin !== '' const hasMaxInput = rawMax != null && rawMax !== '' const min = parseOrderLimitCashValue(rawMin) const max = parseOrderLimitCashValue(rawMax) if (hasMinInput && min == null) { return 'حداقل مبلغ سفارش نامعتبر است' } if (hasMaxInput && max == null) { return 'حداکثر مبلغ سفارش نامعتبر است' } if (min == null && max == null) { return 'با فعال بودن محدودیت مبلغ سفارش، حداقل یکی از حداقل یا حداکثر مبلغ باید وارد شود' } if (min != null && max != null && min > max) { return 'حداقل مبلغ نمی‌تواند بیشتر از حداکثر باشد' } return null } export function normalizeProductOrderLimitForm>(data: T): T { const min = parseOrderLimitCashValue(data.min_order_cash) const max = parseOrderLimitCashValue(data.max_order_cash) const enabled = !!data.order_limit_enabled || min != null || max != null data.order_limit_enabled = enabled if (!enabled) { data.min_order_cash = undefined data.max_order_cash = undefined } else { data.min_order_cash = min data.max_order_cash = max } return data }