/**
  * Update a Square Item for a WC Product
  *
  * @param WC_Product $wc_product
  * @param object     $square_item
  * @param bool       $include_category
  * @param bool       $include_inventory
  *
  * @return object|bool Updated Square Item object on success, boolean False on failure.
  */
 public function update_product(WC_Product $wc_product, $square_item, $include_category = false, $include_inventory = false)
 {
     $square_item = $this->connect->update_square_product($wc_product, $square_item->id, $include_category, $include_inventory);
     if (!$square_item) {
         WC_Square_Sync_Logger::log(sprintf('[WC -> Square] Error updating Square Item ID %s (WC Product %d).', $square_item->id, $wc_product->id));
         return false;
     }
     WC_Square_Utils::update_wc_product_square_id($wc_product->id, $square_item->id);
     if ('simple' === $wc_product->product_type) {
         $wc_variations = array($wc_product);
     } elseif ('variable' === $wc_product->product_type) {
         $wc_variations = WC_Square_Utils::get_wc_product_variations($wc_product);
     }
     foreach ($wc_variations as $wc_variation) {
         $variation_data = WC_Square_Utils::format_wc_variation_for_square_api($wc_variation, $include_inventory);
         $wc_variation_id = 'variation' === $wc_variation->product_type ? $wc_variation->variation_id : $wc_variation->id;
         if ($square_variation_id = WC_Square_Utils::get_wc_variation_square_id($wc_variation_id)) {
             $result = $this->connect->update_square_variation($square_item->id, $square_variation_id, $variation_data);
         } else {
             $result = $this->connect->create_square_variation($square_item->id, $variation_data);
             if ($result && isset($result->id)) {
                 WC_Square_Utils::update_wc_variation_square_id($wc_variation_id, $result->id);
             }
         }
         if (!$result) {
             if ($square_variation_id) {
                 WC_Square_Sync_Logger::log(sprintf('[WC -> Square] Error updating Square ItemVariation %s for WC Variation %d.', $square_variation_id, $wc_variation_id));
             } else {
                 WC_Square_Sync_Logger::log(sprintf('[WC -> Square] Error creating Square ItemVariation for WC Variation %d.', $wc_variation_id));
             }
         }
     }
     return $square_item;
 }