#!/bin/bash
# apply-reseller-import.sh — Hook post-provisión que aplica el JSON del reseller
# al tenant recién creado. Llamado por process-airtable2.sh después del éxito
# de setup_cd_project4.sh.
#
# Uso:
#   apply-reseller-import.sh <RECORD_ID> <CPANEL_USER> <AIRTABLE_TOKEN> <AIRTABLE_BASE_ID>
#
# Flow:
#   1. Check Airtable record.Has_Import_JSON
#   2. Si true: read JSON desde /home/bewpro22/.../storage/app/reseller-imports/{RECORD_ID}.json
#   3. Truncate tablas de las secciones presentes en el JSON
#   4. SCP JSON al tenant
#   5. Ejecutar `php artisan bewpro:seed` en el tenant
#   6. PATCH Airtable Import_Status = Completed | Failed
#
# Idempotente. Si falla en algún paso, deja record con Import_Status=Failed.

set -uo pipefail

RECORD_ID="${1:-}"
CPANEL_USER="${2:-}"
AIRTABLE_TOKEN="${3:-}"
AIRTABLE_BASE_ID="${4:-}"
PROJECTS_TABLE="${5:-tblzCgJZCbbt5j13Q}"
PREFIX="[reseller-import]"

if [[ -z "$RECORD_ID" || -z "$CPANEL_USER" || -z "$AIRTABLE_TOKEN" || -z "$AIRTABLE_BASE_ID" ]]; then
  echo "${PREFIX} ERROR: faltan args. Uso: apply-reseller-import.sh <RECORD_ID> <CPANEL_USER> <TOKEN> <BASE_ID>" >&2
  exit 2
fi

STASH_DIR="/home/bewpro22/public_html/bewpro/storage/app/reseller-imports"
STASH_FILE="${STASH_DIR}/${RECORD_ID}.json"
TENANT_DIR="/home/${CPANEL_USER}/public_html/git-files/${CPANEL_USER}"
TENANT_DB="${CPANEL_USER}_bp"
TENANT_JSON="${TENANT_DIR}/storage/app/incoming-import.json"

# ── 1. Verificar que el stash existe ──────────────────────────────────
# La señal de "import pendiente" es la presencia del stash file. No usamos
# Has_Import_JSON porque ese campo puede no existir en Airtable.
if [[ ! -f "$STASH_FILE" ]]; then
  echo "${PREFIX} ERROR: stash JSON no encontrado en ${STASH_FILE}" >&2
  echo "${PREFIX} Marcando Import_Status=Failed con razón 'JSON file missing'"
  curl -s -X PATCH \
    -H "Authorization: Bearer ${AIRTABLE_TOKEN}" \
    -H "Content-Type: application/json" \
    --data "{\"fields\":{\"Import_Status\":\"Failed\",\"Import_Error\":\"Stash JSON missing on bewpro22\"}}" \
    "https://api.airtable.com/v0/${AIRTABLE_BASE_ID}/${PROJECTS_TABLE}/${RECORD_ID}" \
    > /dev/null 2>&1 || true
  exit 1
fi

# ── 3. Copiar al tenant ───────────────────────────────────────────────
cp "$STASH_FILE" "$TENANT_JSON"
chown "${CPANEL_USER}:${CPANEL_USER}" "$TENANT_JSON"
chmod 640 "$TENANT_JSON"
echo "${PREFIX} JSON copiado a ${TENANT_JSON}"

# ── 4. Truncar las tablas de las secciones presentes en el JSON ──────
# bewpro:seed solo APPEND. Como el tenant ya tiene seed canónico del core,
# colisionan slugs únicos. Truncamos solo lo que el JSON va a reemplazar.
SECTIONS_PRESENT=$(python3 -c "
import json
d = json.load(open('$STASH_FILE'))
print(' '.join([k for k in d.keys() if not k.startswith('_')]))
" 2>/dev/null || echo "")

declare -A SECTION_TO_TABLES=(
  ['blog']='posts post_categories'
  ['faqs']='faqs faqs_categories'
  ['gallery']='gallery gallery_categories gallery_tags gallery_gallery_tag'
  ['menu']='menu_products menu_categories'
  ['testimonials']='testimonials testimonial_categories'
  ['services']='services service_categories'
  ['team']='team_members team_categories'
  ['references']='references reference_categories'
  ['projects']='projects project_categories'
)

TABLES_TO_TRUNCATE=""
for section in $SECTIONS_PRESENT; do
  if [[ -n "${SECTION_TO_TABLES[$section]:-}" ]]; then
    TABLES_TO_TRUNCATE="${TABLES_TO_TRUNCATE} ${SECTION_TO_TABLES[$section]}"
  fi
done

if [[ -n "$TABLES_TO_TRUNCATE" ]]; then
  echo "${PREFIX} Clearing tables (sections del JSON):$TABLES_TO_TRUNCATE"
  # Usar DELETE en lugar de TRUNCATE: MySQL no permite TRUNCATE de tablas
  # referenciadas por FK ni siquiera con FOREIGN_KEY_CHECKS=0. DELETE sí
  # respeta el flag y permite borrar parent tables.
  CLEAR_SQL="SET FOREIGN_KEY_CHECKS=0;"
  for tbl in $TABLES_TO_TRUNCATE; do
    CLEAR_SQL="${CLEAR_SQL} DELETE FROM \`${tbl}\`;"
  done
  CLEAR_SQL="${CLEAR_SQL} SET FOREIGN_KEY_CHECKS=1;"

  CLEAR_OUT=$(mysql "$TENANT_DB" -e "$CLEAR_SQL" 2>&1) || {
    echo "${PREFIX} WARN: clear parcial — output: ${CLEAR_OUT}"
    # No abortar — bewpro:seed va a fallar con un error claro si la integridad
    # quedó comprometida (más útil para debug que silenciar)
  }
fi

# ── 5. Ejecutar bewpro:seed adentro del tenant ────────────────────────
echo "${PREFIX} Ejecutando bewpro:seed en ${CPANEL_USER}..."
SEED_LOG=$(su - "${CPANEL_USER}" -c "
  cd public_html/git-files/${CPANEL_USER} && \
  php artisan bewpro:seed storage/app/incoming-import.json 2>&1
")
SEED_RC=$?

if [[ $SEED_RC -eq 0 ]] && echo "$SEED_LOG" | grep -q "Content seeded"; then
  RECORDS=$(echo "$SEED_LOG" | grep -oE "Content seeded: [0-9]+" | grep -oE "[0-9]+" | head -1)
  echo "${PREFIX} ✓ Content import OK — ${RECORDS:-?} records insertados"

  # PATCH Airtable Import_Status=Completed (campo opcional, ignorar si no existe)
  curl -s -X PATCH \
    -H "Authorization: Bearer ${AIRTABLE_TOKEN}" \
    -H "Content-Type: application/json" \
    --data "{\"fields\":{\"Import_Status\":\"Completed\"},\"typecast\":true}" \
    "https://api.airtable.com/v0/${AIRTABLE_BASE_ID}/${PROJECTS_TABLE}/${RECORD_ID}" \
    > /dev/null 2>&1 || true

  # Cleanup del stash (opcional — útil para no acumular)
  rm -f "$STASH_FILE" 2>/dev/null || true
  exit 0
else
  echo "${PREFIX} ✗ Content import FAILED" >&2
  echo "$SEED_LOG" | tail -10 >&2

  ERR_SUMMARY=$(echo "$SEED_LOG" | tail -3 | tr '\n' ' ' | sed 's/"/\\"/g' | cut -c1-300)
  curl -s -X PATCH \
    -H "Authorization: Bearer ${AIRTABLE_TOKEN}" \
    -H "Content-Type: application/json" \
    --data "{\"fields\":{\"Import_Status\":\"Failed\",\"Import_Error\":\"${ERR_SUMMARY}\"},\"typecast\":true}" \
    "https://api.airtable.com/v0/${AIRTABLE_BASE_ID}/${PROJECTS_TABLE}/${RECORD_ID}" \
    > /dev/null 2>&1 || true

  exit 1
fi
