/**
  * {@inheritdoc}
  */
 public function createVariation(ProductInterface $product, $copyDependencies = true)
 {
     if ($product->isVariation()) {
         throw new \RuntimeException('Cannot create a variation from a variation product');
     }
     $variation = clone $product;
     $variation->setParent($product);
     $variation->setId(null);
     $variation->setVariations(new ArrayCollection());
     $variation->setDeliveries(new ArrayCollection());
     $variation->setProductCategories(new ArrayCollection());
     $variation->setProductCollections(new ArrayCollection());
     $variation->setPackages(new ArrayCollection());
     $product->addVariation($variation);
     $variationCollection = new ArrayCollection(array($variation));
     $this->synchronizeVariationsProduct($product, $variationCollection);
     if ($copyDependencies) {
         $this->synchronizeVariationsDeliveries($product, $variationCollection);
         $this->synchronizeVariationsPackages($product, $variationCollection);
         $this->synchronizeVariationsCategories($product, $variationCollection);
         $this->synchronizeVariationsCollections($product, $variationCollection);
     }
     $variation->setEnabled(false);
     $variation->setName(sprintf('%s (duplicated)', $product->getName()));
     $variation->setSku(sprintf('%s_DUPLICATE', $product->getSku()));
     return $variation;
 }