<?php

namespace PayPal\Api;

use PayPal\Rest\ApiContext;
use PayPal\Transport\PayPalRestCall;

/**
 * Class FuturePayment
 *
 * @package PayPal\Api
 */
class FuturePayment extends Payment {


	/**
	 * Extends the Payment object to create future payments
	 *
	 * @param null $apiContext
	 * @param string|null  $clientMetadataId
	 * @param PayPalRestCall|null $restCall is the Rest Call Service that is used to make rest calls
	 * @return $this
	 */
	public function create( $apiContext = null, $clientMetadataId = null, $restCall = null) {
		$headers = array();
		if ($clientMetadataId != null) {
			$headers = array(
				'PAYPAL-CLIENT-METADATA-ID' => $clientMetadataId
			);
		}
		$payLoad = $this->toJSON();
		$json = self::executeCall(
			'/v1/payments/payment',
			'POST',
			$payLoad,
			$headers,
			$apiContext,
			$restCall
		);
		$this->fromJson($json);
		return $this;
	}

	/**
	 * Get a Refresh Token from Authorization Code
	 *
	 * @param $authorizationCode
	 * @param ApiContext $apiContext
	 * @return string|null refresh token
	 */
	public static function getRefreshToken( $authorizationCode, $apiContext = null) {
		$apiContext = $apiContext ? $apiContext : new ApiContext(self::$credential);
		$credential = $apiContext->getCredential();
		return $credential->getRefreshToken($apiContext->getConfig(), $authorizationCode);
	}

}
