<?php
require_once ("lib-action/action.php");

class ShowPackageDetails extends MB_Action
{
	public $params = array("packageID");

	public function execute()
    {
		parent::execute();
		global $CONF;
		if ($_REQUEST["guid"]){
			$attribute = oneOf(":packageAttributes", array(
				"packageAttributeName" => "guid",
				"packageAttributeValue" => $_REQUEST['guid']
			));
			if ($attribute["packageID"]){
				$_REQUEST["packageID"] = $attribute["packageID"];
			}
		}

		$this->smartyVars['keyedServerGroups'] = optionsFor(":serverGroups");

		$rawPackages = collapsePluralsAndSingulars(grabResultsFromMBAPIArray(
			array(
				"mbapi" => array(
					"command" => "GetPackages",
					"params" => array(
						"clientID" => $CONF["user"]["id"],
						"getDomainData" => 1,
						"getPackageAttributeData" => 1,
						"getPackageAddonData" => 1,
						"suppressFeePackages" => $suppressFeePackages,
						"packageID" => (int)$_REQUEST["packageID"],
					),
				)
			)
		));

		loadConfigs("product", "managementrules");
		$user = oneByID(":contacts", $CONF['user']['clientContactID']);
		$this->smartyVars['isPrimary'] = $user['contactPrimary'];

		foreach ((array)$rawPackages as $x=>$p){
			$keyedAttributes = array();
			$serverGroups = array();
			foreach ((array)$p["packageAttributes"] as $attribute){
				if (stripos($attribute['packageAttributeName'], 'password') && $user['contactPrimary']==1){
					$attribute['packageAttributeValue'] = getStuff($attribute['packageAttributeValue']);
				}
				$serverGroups[$attribute["serverGroupID"]] = $attribute["configGroupID"];
				$keyedAttributes[$attribute["serverGroupID"]][$attribute["packageAttributeName"]] = $attribute;
			}

			foreach ((array)$serverGroups as $serverGroupID=>$configGroupID){
				if ($xx = $this->getPanelCustomActionData($p["packageID"], $serverGroupID, $configGroupID)){
					$serverGroups[$serverGroupID] = $xx;
				} else {
					unset($serverGroups[$serverGroupID]);
				}
			}
			$rawPackages[$x]["panelTemplates"] = $serverGroups;
			$rawPackages[$x]["keyedAttributes"] = $keyedAttributes;
		}

		$this->smartyVars["managementrules"] = $CONF["product"]["managementrules"];
		$this->smartyVars["numPackages"] = count((array)$rawPackages);
		$this->smartyVars["statusPackages"] = array();

		$this->smartyVars["upgradeDowngradeStatuses"] = array(
			getAPIStatusID("package", "none") => 1,
			getAPIStatusID("package", "pending") => 1,
		);

		$currentRawPackage = NULL;
		$currentPackageStatus = NULL;
		foreach ((array)$rawPackages as $k => $package){


			if ($package["packageDateStopRenewal"]>(25*60*60)){
				$numCycles = 0;
				$nextRenewal = $package["packageDateNextRenewal"];
				while ($nextRenewal<$package["packageDateStopRenewal"]){
					$numCycles++;
					$nextRenewal = getNextBillingTimestamp($nextRenewal, $package["cycleID"]);
				}
				$rawPackages[$k]["moreCycles"] = $numCycles;
				$rawPackages[$k]["stopDate"] = $nextRenewal;
			} else {
				$rawPackages[$k]["stopDate"] = 0;
				$rawPackages[$k]["moreCycles"] = 0;
			}

			//Pull all of the server group IDs out
			$panels = array();
			$attributes = $package["packageAttributes"];
			if(is_array($attributes)) {
				foreach($attributes as $attribute) {
					if($attribute["packageAttributeName"] == "panel_status") {
						$panels[] = $attribute["configGroupID"];
					}
				}
			}

			foreach($panels as $panel) {

				$tmp = collapsePluralsAndSingulars(grabResultsFromMBAPIArray(
					array(
						"mbapi" => array(
							"command" => "GetPackageUsageLog",
							"params" => array(
								"packageID" => $package["packageID"],
								"configGroupID" => $panel,
								"usageLogDateBilled" => -1,
								"getTotals" => 1,

							)
						)
					)
				));
				$packageUsage[$package["packageID"]] = $tmp[0];
				unset($tmp);
			}

			$rawPackages[$k]["rules"] = array(
				"addons" => $CONF["product"]["managementrules"]["allowClientAddonManagement"],
				"upgrade" => $CONF["product"]["managementrules"]["allowClientUpgrade"],
				"downgrade" => $CONF["product"]["managementrules"]["allowClientDowngrade"],
			);


			switch ($rawPackages[$k]["packageClientPermissions"]){
				case getAPITypeID("packagemanagement", "upgradedowngradeaddon"):
					$rawPackages[$k]["rules"] = array(
						"addons" => 1,
						"upgrade" => 1,
						"downgrade" => 1,
					);
				break;
				case getAPITypeID("packagemanagement", "upgradedowngrade"):
					$rawPackages[$k]["rules"] = array(
						"addons" => 0,
						"upgrade" => 1,
						"downgrade" => 1,
					);
				break;
				case getAPITypeID("packagemanagement", "upgrade"):
					$rawPackages[$k]["rules"] = array(
						"addons" => 0,
						"upgrade" => 1,
						"downgrade" => 0,
					);
				break;
				case getAPITypeID("packagemanagement", "downgrade"):
					$rawPackages[$k]["rules"] = array(
						"addons" => 0,
						"upgrade" => 0,
						"downgrade" => 1,
					);
				break;
				case getAPITypeID("packagemanagement", "downgradeaddon"):
					$rawPackages[$k]["rules"] = array(
						"addons" => 1,
						"upgrade" => 0,
						"downgrade" => 1,
					);
				break;
				case getAPITypeID("packagemanagement", "upgradeaddon"):
					$rawPackages[$k]["rules"] = array(
						"addons" => 1,
						"upgrade" => 1,
						"downgrade" => 0,
					);
				break;
				case getAPITypeID("packagemanagement", "addon"):
					$rawPackages[$k]["rules"] = array(
						"addons" => 1,
						"upgrade" => 0,
						"downgrade" => 0,
					);
				break;
			}

			switch ($rawPackages[$k]["packageStatus"]){
				case getAPIStatusID("package", "none"):
				case getAPIStatusID("package", "pending"):
				case getAPIStatusID("package", "pending_renewal"):
					$rawPackages[$k]["mayCancel"] = 1;
				break;
				default:
					$rawPackages[$k]["mayCancel"] = 0;
				break;
			}

			switch ($rawPackages[$k]["packageCancellationType"]){
				case getAPITypeID("cancellation", "both_suspend"):
				case getAPITypeID("cancellation", "both_delete"):
					$rawPackages[$k]["clientCancel"] = 1;
				break;
				default:
					$rawPackages[$k]["clientCancel"] = 0;
				break;
			}

			$subscription = Factory()->Package($rawPackages[$k]["packageID"]);
			$rawPackages[$k]["canUpgrade"] = $subscription->canUpgrade();
			$rawPackages[$k]["canDowngrade"] = $subscription->canDowngrade();

			switch( (int)$package["packageType"] ) {
				case getAPITypeID("products", "cert"):

					$lineItem = oneOf("lineItems", array(
							"packageID" => (int)$package["packageID"],
							"packageAddonID" => 0,

							"lineItemIsUsage" => false,

							"sortColumn" => "lineItemID",
							"sortDir" => "asc",
							"recordOffset" => 0,
							"numRecords" => 1));

					dbg("Returned Line Item for Cert Package $package[packageID]");
					dbg($lineItem);

					if ( (int)$lineItem["invoiceID"] ) {
						$invoice = oneByID("invoices", $lineItem["invoiceID"]);

						dbg("Invoice line item is connected to");
						dbg($invoice);

						$amountDue = round($invoice["invoiceAmount"], 2);
						$amountPaid = round($invoice["invoiceAmountPaid"], 2);

						if ($amountDue == $amountPaid && $amountDue > 0) {
							$rawPackages[ $k ]["invoicePaid"] = true;
						} else {
							$rawPackages[ $k ]["invoicePaid"] = false;
						}

						unset( $invoice, $amountDue, $amountPaid );
					} else {
						$rawPackages[ $k ]["invoicePaid"] = false;
					}
					unset( $lineItem );
				break;
			}
			if ((int)$package["parentPackageID"]) {
				$this->smartyVars["childPackages"][$package["parentPackageID"]][] = $rawPackages[$k];
			} else {
			 	// retrieve price data and pass it to template
				$subscription = Factory()->Package($rawPackages[$k]['packageID']);
				$planPrice = $subscription->getPrice();
				$rawPackages[$k]['planPrice'] = $planPrice;
		    	$totalPrice = $planPrice['total'];
		    	$addonPrices = array();
		    	foreach (Factory()->PackageAddonList(array('package_id' => $rawPackages[$k]['packageID'])) as $addon) {
		    		$addonPlan = Factory()->Product($addon->package_addon_product_id);
		    		$addonPrice = $addon->getPrice();
		    		$addonPrices[$addonPlan->product_name] = $addonPrice;
		    		$totalPrice += $addonPrice['total'];
		    	}
		    	$rawPackages[$k]['addonPrices'] = $addonPrices;
		    	$rawPackages[$k]['totalPrice'] = $totalPrice;
			 	
				$this->smartyVars["statusPackages"][$package["packageStatus"]]["packages"][] = $rawPackages[$k];
			}
			if (bgpc("packageID") == $package["packageID"]) {
				$currentRawPackage = $rawPackages[$k];
				$currentPackageStatus = $package["packageStatus"];
			}

			$this->smartyVars["packageUsage"][$package["packageID"]] =& $packageUsage[$package["packageID"]];
		}

		if (0 == count($this->smartyVars["statusPackages"]))
			$this->smartyVars["statusPackages"][$currentPackageStatus]["packages"] = array($currentRawPackage);

		$this->smartyVars["cancelledStatusID"] = getAPIStatusID("package", "canceled");

		$this->smartyVars["packageStatuses"] = getStatuses("package");
		$this->smartyVars["cycles"] = getCyclesArray();

		ksort($this->smartyVars["statusPackages"]);
        $subscription = Factory()->Package(bgpc("packageID"));
        if (!is_null($subscription->upgrade_locking_date) && strtotime($subscription->upgrade_locking_date) > time()) {
            $this->smartyVars["warningMessages"][] = blmsg("TRANS_SUBSCRIPTION_AFTER_UPGRADE_DOWNGRADE_WARNING", array("DATE" => $subscription->upgrade_locking_date));
        }


		$this->addTemplate("packages/ShowPackageDetails", $this->smartyVars);

		$this->hasExecutedSuccessfully = 1;


		$this->addErrorTemplates();
		return $this->hasExecutedSuccessfully();
	}
}