import { ref } from 'vue' export type SpecialPricingRule = { product_id?: number package_id: number title: string profit_buy: number profit_sell: number show_product: boolean } export type SpecialPricingPayload = { enabled?: boolean products?: SpecialPricingRule[] board?: SpecialPricingRule | null } const state = ref<{ enabled: boolean byProduct: Record board: SpecialPricingRule | null }>({ enabled: false, byProduct: {}, board: null, }) export function setSpecialPricingPayload(payload?: SpecialPricingPayload | null) { if (!payload || !payload.enabled) { state.value = { enabled: false, byProduct: {}, board: null } return } const byProduct: Record = {} for (const row of payload.products ?? []) { const pid = Number(row.product_id ?? 0) if (pid > 0) byProduct[pid] = row } state.value = { enabled: true, byProduct, board: payload.board ?? null, } } export function getSpecialPricingState() { return state } /** اگر سرور قبلاً special_pricing نزده، اختلاف تابلو را روی last اعمال کن */ export function applyBoardSpecialToLastPayload>(payload: T): T { if (!payload || typeof payload !== 'object') return payload if (payload.special_pricing) return payload const board = state.value.board if (!state.value.enabled || !board) return payload const buyExtra = Number(board.profit_buy ?? 0) const sellExtra = Number(board.profit_sell ?? 0) if (buyExtra <= 0 && sellExtra <= 0) return payload const next = { ...payload } as T & Record if (Number(next.buy ?? 0) > 0 && buyExtra > 0) { next.buy = Number(next.buy) + buyExtra } if (Number(next.sell ?? 0) > 0 && sellExtra > 0) { next.sell = Math.max(0, Number(next.sell) - sellExtra) } if (Number(next.price_last ?? 0) > 0 && buyExtra > 0) { next.price_last = Number(next.price_last) + buyExtra } next.special_pricing = { package_id: board.package_id, title: board.title, profit_buy: buyExtra, profit_sell: sellExtra, } return next }