/**
  * Set select attribute item
  *
  * @param \XLite\Model\Repo\ARepo $repo    Repository
  * @param \XLite\Model\Product    $product Product
  * @param array                   $data    Data
  * @param integer                 $id      Attribute value ID
  * @param mixed                   $value   Attribute value
  *
  * @return array
  */
 protected function setAttributeValueSelectItem(\XLite\Model\Repo\ARepo $repo, \XLite\Model\Product $product, array $data, $id, $value)
 {
     $result = array(null, null, null);
     $attributeValue = $attributeOption = null;
     if ($this->getProduct() && 0 < $id && !isset($data['ignoreIds'])) {
         $attributeValue = $repo->find($id);
         if ($attributeValue) {
             $attributeOption = $attributeValue->getAttributeOption();
             $attributeOption->setName($value);
         }
     }
     if (!$attributeOption) {
         $attributeOption = \XLite\Core\Database::getRepo('XLite\\Model\\AttributeOption')->findOneByNameAndAttribute($value, $this);
     }
     if (!$attributeOption) {
         $attributeOption = $this->createAttributeOption($value);
     } else {
         $attributeValue = $repo->findOneBy(array('attribute_option' => $attributeOption, 'product' => $product));
     }
     if (!$attributeValue && 0 < $id && !isset($data['ignoreIds'])) {
         $attributeValue = $repo->find($id);
     }
     if ($attributeValue) {
         $result[0] = $attributeValue->getId();
     } elseif ($attributeOption) {
         $attributeValue = $this->createAttributeValue($product);
     }
     if ($attributeValue) {
         $attributeValue->setAttributeOption($attributeOption);
         $attributeValue->setDefaultValue(isset($data['default'][$id]));
         foreach ($attributeValue::getModifiers() as $modifier => $options) {
             if (isset($data[$modifier]) && isset($data[$modifier][$id])) {
                 $attributeValue->setModifier($data[$modifier][$id], $modifier);
             }
         }
         \XLite\Core\Database::getEM()->flush();
         $result = array($attributeValue->getId(), $attributeValue, $attributeOption);
     }
     return $result;
 }