#!/usr/bin/env bash
# fix-variation-titles.sh
#
# Popola il campo `title` delle commerce_product_variation che lo hanno NULL,
# copiandolo dal titolo del prodotto padre nella stessa lingua.
# Fallback: SKU della variazione se il prodotto padre non ha titolo.
#
# Uso (su server di produzione, dalla root del progetto):
#   bash scripts/fix-variation-titles.sh
#
# Uso in DDEV (locale):
#   ddev exec bash scripts/fix-variation-titles.sh

set -euo pipefail

DRUSH="vendor/bin/drush"

echo "==> Conteggio variazioni senza titolo..."
BEFORE=$(${DRUSH} sql-query "SELECT COUNT(*) FROM commerce_product_variation_field_data WHERE title IS NULL OR title = '';" 2>/dev/null | tail -1)
echo "    Trovate: ${BEFORE}"

if [ "${BEFORE}" = "0" ]; then
  echo "    Nessuna variazione da correggere. Uscita."
  exit 0
fi

echo "==> Correzione in corso..."
${DRUSH} php-eval "
\$storage = \Drupal::entityTypeManager()->getStorage('commerce_product_variation');
\$ids = \$storage->getQuery()->accessCheck(FALSE)->execute();
\$fixed = 0;
foreach (\$storage->loadMultiple(\$ids) as \$variation) {
  \$needs_save = FALSE;
  foreach (\$variation->getTranslationLanguages() as \$lang) {
    \$t = \$variation->getTranslation(\$lang->getId());
    if (!empty(\$t->getTitle())) {
      continue;
    }
    \$product = \$t->getProduct();
    if (\$product) {
      \$source = \$product->hasTranslation(\$lang->getId())
        ? \$product->getTranslation(\$lang->getId())
        : \$product;
      \$t->setTitle(\$source->getTitle() ?: \$variation->getSku());
    } else {
      \$t->setTitle(\$variation->getSku());
    }
    \$needs_save = TRUE;
  }
  if (\$needs_save) {
    \$variation->save();
    \$fixed++;
  }
}
echo \"Corrette \$fixed variazioni.\n\";
"

echo "==> Verifica post-correzione..."
AFTER=$(${DRUSH} sql-query "SELECT COUNT(*) FROM commerce_product_variation_field_data WHERE title IS NULL OR title = '';" 2>/dev/null | tail -1)
echo "    Variazioni con titolo NULL rimaste: ${AFTER}"

if [ "${AFTER}" = "0" ]; then
  echo "==> OK: tutte le variazioni hanno ora un titolo."
else
  echo "==> ATTENZIONE: rimangono ${AFTER} variazioni senza titolo. Controllare manualmente."
  exit 1
fi
