<?php
/**
 * The Billing Cycle object.
 *
 * @package WooCommerce\PayPalCommerce\ApiClient\Entity
 */

declare(strict_types=1);

namespace WooCommerce\PayPalCommerce\ApiClient\Entity;

/**
 * Class BillingCycle
 */
class BillingCycle {

	/**
	 * Frequency.
	 *
	 * @var array
	 */
	private $frequency;

	/**
	 * Sequence.
	 *
	 * @var int
	 */
	private $sequence;

	/**
	 * Tenure Type.
	 *
	 * @var string
	 */
	private $tenure_type;

	/**
	 * Pricing scheme.
	 *
	 * @var array
	 */
	private $pricing_scheme;

	/**
	 * Total cycles.
	 *
	 * @var int
	 */
	private $total_cycles;

	/**
	 * BillingCycle constructor.
	 *
	 * @param array  $frequency Frequency.
	 * @param int    $sequence Sequence.
	 * @param string $tenure_type Tenure type.
	 * @param array  $pricing_scheme Pricing scheme.
	 * @param int    $total_cycles Total cycles.
	 */
	public function __construct(
		array $frequency,
		int $sequence,
		string $tenure_type,
		array $pricing_scheme = array(),
		int $total_cycles = 1
	) {
		$this->frequency      = $frequency;
		$this->sequence       = $sequence;
		$this->tenure_type    = $tenure_type;
		$this->pricing_scheme = $pricing_scheme;
		$this->total_cycles   = $total_cycles;
	}

	/**
	 * Returns frequency.
	 *
	 * @return array
	 */
	public function frequency(): array {
		return $this->frequency;
	}

	/**
	 * Returns sequence.
	 *
	 * @return int
	 */
	public function sequence(): int {
		return $this->sequence;
	}

	/**
	 * Returns tenure type.
	 *
	 * @return string
	 */
	public function tenure_type(): string {
		return $this->tenure_type;
	}

	/**
	 * Returns pricing scheme.
	 *
	 * @return array
	 */
	public function pricing_scheme(): array {
		return $this->pricing_scheme;
	}

	/**
	 * Return total cycles.
	 *
	 * @return int
	 */
	public function total_cycles(): int {
		return $this->total_cycles;
	}

	/**
	 * Returns Billing Cycle as array.
	 *
	 * @return array
	 */
	public function to_array(): array {
		return array(
			'frequency'      => $this->frequency(),
			'sequence'       => $this->sequence(),
			'tenure_type'    => $this->tenure_type(),
			'pricing_scheme' => $this->pricing_scheme(),
			'total_cycles'   => $this->total_cycles(),
		);
	}
}
