<?php

class BuyAction extends CatalogAction {
	
	public function execute($request) {
		
		$planId = $request->getParameter('plan');
		$plan = $this->_store->getPlan($planId);
		
		$cart = ResourceLocator::getInstance()->cart;
		$cartItem = new CartItem($planId);
		
		$purchase = null;
		
		switch ($plan->productType) {
			case BillingPlan::TYPE_DOMAIN:
				break;
			default:
				$priceId = $request->getParameter('price');
				$price = $plan->getPriceById($priceId);
				$cycleId = $price->cycleID;
				$purchase = new Purchase($planId, $cycleId, $priceId, $plan->productName, $plan->productType);
				if ($coupon = $plan->getPreappliedCoupon()) {
					$purchase->setCoupon($coupon);
				}
				$cartItem->addPurchase($purchase);
		}
		
		$cart->setCurrentItem($cartItem);
		
		// attach try before buy SiteBuilder parameters to cart
		if ($tryBeforeBuySiteBuilderParameters = $this->getUser()->getAttribute('tryBeforeBuySiteBuilderParameters')) {
			$cart->addParameter('tryBeforeBuySiteBuilderParameters', $tryBeforeBuySiteBuilderParameters);
			$this->getUser()->getAttributeHolder()->remove('tryBeforeBuySiteBuilderParameters');
		}
		
		$initialPage = new RouterPage('catalog', array('container' => $this->_container));
		
		$steps = array(
			new RouterPage('select-addons'),
			new RouterPage('add-purchase'),
			new RouterPage('summary'),
			new RouterPage('contact-information'),
			new RouterPage('order-details'),
			new RouterPage('confirmation'),
			new RouterPage('thank-you')
		);
		
		if ($plan->productDomainRequired == 1) {
			if ($purchase) {
				$cartItem->setMasterPurchase($purchase->getId());
			}
			$steps = array_merge(
				array(
					new RouterPage('select-domain'),
					new RouterPage('register-domain')
				),
				$steps
			);
		}
		
		$router = new Router();
		$router->init($steps, $initialPage);
		
		ResourceLocator::getInstance()->routersStack->push($router);
		$router->next();
		
		return sfView::NONE;
		
	}
}