100.00, 'currency' => 'USD'] if (isset($value['value']) && isset($value['currency'])) { return Money::fromDecimal($value['value'], $value['currency']); } } return $value; case 'status': if (is_string($value) && DonationStatus::isValid($value)) { return new DonationStatus($value); } return $value; case 'type': if (is_string($value) && DonationType::isValid($value)) { return new DonationType($value); } return $value; case 'mode': if (is_string($value) && DonationMode::isValid($value)) { return new DonationMode($value); } return $value; case 'billingAddress': if (is_array($value)) { return BillingAddress::fromArray($value); } return $value; case 'createdAt': case 'updatedAt': try { if (is_string($value)) { return new DateTime($value, wp_timezone()); } elseif (is_array($value)) { return new DateTime($value['date'], new \DateTimeZone($value['timezone'])); } } catch (\Exception $e) { throw new InvalidArgumentException("Invalid date format for {$key}: {$value}."); } return $value; default: return $value; } } }