<?php
/**
 * The Amount Breakdown object.
 *
 * @package WooCommerce\PayPalCommerce\ApiClient\Entity
 */

declare(strict_types=1);

namespace WooCommerce\PayPalCommerce\ApiClient\Entity;

/**
 * Class AmountBreakdown
 */
class AmountBreakdown {

	/**
	 * The item total.
	 *
	 * @var Money|null
	 */
	private $item_total;

	/**
	 * The shipping.
	 *
	 * @var Money|null
	 */
	private $shipping;

	/**
	 * The tax total.
	 *
	 * @var Money|null
	 */
	private $tax_total;

	/**
	 * The handling.
	 *
	 * @var Money|null
	 */
	private $handling;

	/**
	 * The insurance.
	 *
	 * @var Money|null
	 */
	private $insurance;

	/**
	 * The shipping discount.
	 *
	 * @var Money|null
	 */
	private $shipping_discount;

	/**
	 * The discount.
	 *
	 * @var Money|null
	 */
	private $discount;

	/**
	 * AmountBreakdown constructor.
	 *
	 * @param Money|null $item_total The item total.
	 * @param Money|null $shipping The shipping.
	 * @param Money|null $tax_total The tax total.
	 * @param Money|null $handling The handling.
	 * @param Money|null $insurance The insurance.
	 * @param Money|null $shipping_discount The shipping discount.
	 * @param Money|null $discount The discount.
	 */
	public function __construct(
		?Money $item_total = null,
		?Money $shipping = null,
		?Money $tax_total = null,
		?Money $handling = null,
		?Money $insurance = null,
		?Money $shipping_discount = null,
		?Money $discount = null
	) {

		$this->item_total        = $item_total;
		$this->shipping          = $shipping;
		$this->tax_total         = $tax_total;
		$this->handling          = $handling;
		$this->insurance         = $insurance;
		$this->shipping_discount = $shipping_discount;
		$this->discount          = $discount;
	}

	/**
	 * Returns the item total.
	 *
	 * @return Money|null
	 */
	public function item_total() {
		return $this->item_total;
	}

	/**
	 * Returns the shipping.
	 *
	 * @return Money|null
	 */
	public function shipping() {
		return $this->shipping;
	}

	/**
	 * Returns the tax total.
	 *
	 * @return Money|null
	 */
	public function tax_total() {
		return $this->tax_total;
	}

	/**
	 * Returns the handling.
	 *
	 * @return Money|null
	 */
	public function handling() {
		return $this->handling;
	}

	/**
	 * Returns the insurance.
	 *
	 * @return Money|null
	 */
	public function insurance() {
		return $this->insurance;
	}

	/**
	 * Returns the shipping discount.
	 *
	 * @return Money|null
	 */
	public function shipping_discount() {
		return $this->shipping_discount;
	}

	/**
	 * Returns the discount.
	 *
	 * @return Money|null
	 */
	public function discount() {
		return $this->discount;
	}

	/**
	 * Returns the object as array.
	 *
	 * @return array
	 */
	public function to_array() {
		$breakdown = array();
		if ( $this->item_total ) {
			$breakdown['item_total'] = $this->item_total->to_array();
		}
		if ( $this->shipping ) {
			$breakdown['shipping'] = $this->shipping->to_array();
		}
		if ( $this->tax_total ) {
			$breakdown['tax_total'] = $this->tax_total->to_array();
		}
		if ( $this->handling ) {
			$breakdown['handling'] = $this->handling->to_array();
		}
		if ( $this->insurance ) {
			$breakdown['insurance'] = $this->insurance->to_array();
		}
		if ( $this->shipping_discount ) {
			$breakdown['shipping_discount'] = $this->shipping_discount->to_array();
		}
		if ( $this->discount ) {
			$breakdown['discount'] = $this->discount->to_array();
		}

		return $breakdown;
	}
}
