<?php

namespace Stripe;

/**
 * Class AlipayAccount.
 *
 * @deprecated Alipay accounts are deprecated. Please use the sources API instead.
 * @see https://stripe.com/docs/sources/alipay
 */
class AlipayAccount extends ApiResource {

	const OBJECT_NAME = 'alipay_account';

	use ApiOperations\Delete;
	use ApiOperations\Update;

	/**
	 * @return string The instance URL for this resource. It needs to be special
	 *    cased because it doesn't fit into the standard resource pattern.
	 */
	public function instanceUrl() {
		if ( $this['customer'] ) {
			$base   = Customer::classUrl();
			$parent = $this['customer'];
			$path   = 'sources';
		} else {
			$msg = 'Alipay accounts cannot be accessed without a customer ID.';

			throw new Exception\UnexpectedValueException( $msg );
		}
		$parentExtn = \urlencode( Util\Util::utf8( $parent ) );
		$extn       = \urlencode( Util\Util::utf8( $this['id'] ) );

		return "{$base}/{$parentExtn}/{$path}/{$extn}";
	}

	/**
	 * @param array|string      $_id
	 * @param null|array|string $_opts
	 *
	 * @throws \Stripe\Exception\BadMethodCallException
	 *
	 * @deprecated Alipay accounts are deprecated. Please use the sources API instead.
	 * @see https://stripe.com/docs/sources/alipay
	 */
	public static function retrieve( $_id, $_opts = null ) {
		$msg = 'Alipay accounts cannot be retrieved without a customer ID. ' .
			   'Retrieve an Alipay account using `Customer::retrieveSource(' .
			   "'customer_id', 'alipay_account_id')`.";

		throw new Exception\BadMethodCallException( $msg );
	}

	/**
	 * @param string            $_id
	 * @param null|array        $_params
	 * @param null|array|string $_options
	 *
	 * @throws \Stripe\Exception\BadMethodCallException
	 *
	 * @deprecated Alipay accounts are deprecated. Please use the sources API instead.
	 * @see https://stripe.com/docs/sources/alipay
	 */
	public static function update( $_id, $_params = null, $_options = null ) {
		$msg = 'Alipay accounts cannot be updated without a customer ID. ' .
			   'Update an Alipay account using `Customer::updateSource(' .
			   "'customer_id', 'alipay_account_id', \$updateParams)`.";

		throw new Exception\BadMethodCallException( $msg );
	}
}
