<?php

class BillingPrice extends BillingObject {
	
	private $_cycleTaxes = null;
	
	private $_transferTaxes = null;
	
	public function getCycleFee($withDiscount = true, $withTax = true) {
		$tmp = $withDiscount ? $this->discountPrice : (float)$this->productVariantPriceAmount;
		return $withTax ? $tmp + (float)$this->taxAmount : $tmp;
	}
	
	public function getSetupFee() {
		return isset($this->setupAmount) ? $this->setupAmount : false;
	}
	
	public function getTransferFee($withDiscount = true, $withTax = true) {
		if (isset($this->productVariantPriceTransferAmount)) {
			$tmp = $withDiscount ? $this->discountTransferPrice : (float)$this->productVariantPriceTransferAmount;
			return $withTax ? $tmp + (float)$this->transferTaxAmount : $tmp;
		} else {
			return false;
		}
	}
	
	public function getTotalFee($withDiscount = true, $withTax = true, $useTransferFee = false) {
		$fee = $useTransferFee ? $this->getTransferFee($withDiscount, $withTax) : $this->getCycleFee($withDiscount, $withTax);
		return $fee;
	}
	
	public function getCycleTaxes() {
		if (is_null($this->_cycleTaxes)) {
			$this->_cycleTaxes = array();
			if (isset($this->cycleTaxes)) {
				foreach ($this->cycleTaxes as $data) {
					$this->_cycleTaxes[] = new BillingTax($data);
				}
			}
		}
		return $this->_cycleTaxes;
	}
	
	public function getTransferTaxes() {
		if (is_null($this->_transferTaxes)) {
			$this->_transferTaxes = array();
			if (isset($this->transferTaxes)) {
				foreach ($this->transferTaxes as $data) {
					$this->_transferTaxes[] = new BillingTax($data);
				}
			}
		}
		return $this->_transferTaxes;
	}
	
	public function hasCycleFee() {
		return (float)$this->productVariantPriceAmount ? true : false;
	}
	
	public function hasSetupFee() {
		return isset($this->setupAmount) && (float)$this->setupAmount ? true : false;
	}
	
	public function hasTransferFee() {
		return isset($this->productVariantPriceTransferAmount) && (float)$this->productVariantPriceTransferAmount ? true : false;
	}
	
	public function hasCycleTaxes() {
		return isset($this->cycleTaxes);
	}
	
	public function hasTransferTaxes() {
		return isset($this->transferTaxes);
	}
	
	public function getDiscountAmount() {
		return $this->discountAmount;
	}
	
	public function getDiscountRate() {
		return $this->discountAmount / (float)$this->productVariantPriceAmount;
	}
	
	public function getTransferDiscountAmount() {
		return isset($this->productVariantPriceTransferAmount) ? $this->discountTransferAmount : false;
	}
	
	public function getTransferDiscountRate() {
		return isset($this->productVariantPriceTransferAmount) ? $this->discountTransferAmount / (float)$this->productVariantPriceTransferAmount : false;
	}
	
	public function hasDiscount() {
		return $this->discountAmount ? true : false;
	}
	
	protected function _extractId() {
		return $this->productVariantPriceID;
	}
	
}