configService->mainWalletProductIds(); } /** @param Collection|array|null $wallets */ public function mainWalletCash(Collection|array|null $wallets): float { $line = $this->mainWalletLine($wallets); return (float) ($this->lineValue($line, 'cash') ?? 0); } /** @param Collection|array|null $wallets */ public function mainWalletGold(Collection|array|null $wallets): float { $line = $this->mainWalletLine($wallets); return (float) ($this->lineValue($line, 'gold') ?? 0); } /** * جمع طلای قابل‌نمایش: کیف اصلی + کیف محصولات + قلک‌ها. * کیف‌های legacy محصولات main_wallet_products شمرده نمی‌شوند. * * @param Collection|array|null $wallets */ public function totalGoldWeight( Collection|array|null $wallets, ?array $mainWalletProductIds = null ): float { $mainWalletProductIds ??= $this->mainWalletProductIds(); $sum = 0.0; foreach ($this->walletLines($wallets) as $line) { $fundId = $this->lineValue($line, 'fund_id'); $productId = (int) ($this->lineValue($line, 'product_id') ?? 0); $gold = (float) ($this->lineValue($line, 'gold') ?? 0); if ($gold <= 0) { continue; } if ($fundId !== null) { $sum += $gold; continue; } if ($productId === 0) { $sum += $gold; continue; } if ($mainWalletProductIds !== [] && in_array($productId, $mainWalletProductIds, true)) { continue; } $sum += $gold; } return $sum; } /** @param Collection|array|null $wallets */ private function mainWalletLine(Collection|array|null $wallets): mixed { foreach ($this->walletLines($wallets) as $line) { if ($this->lineValue($line, 'fund_id') === null && $this->lineValue($line, 'product_id') === null) { return $line; } } return null; } /** @param Collection|array|null $wallets */ private function walletLines(Collection|array|null $wallets): array { if ($wallets === null) { return []; } if ($wallets instanceof Collection) { return $wallets->all(); } return is_array($wallets) ? $wallets : []; } private function lineValue(mixed $line, string $key): mixed { if (is_array($line)) { return $line[$key] ?? null; } if (is_object($line)) { return $line->{$key} ?? null; } return null; } }