#!/usr/bin/env bash
set -euo pipefail

# ===== Config =====
PHP=${PHP:-php}
SCRIPT_CAT_PROD=${SCRIPT_CAT_PROD:-importar_cat_prod.php}
SCRIPT_COST_EQ=${SCRIPT_COST_EQ:-importar_costos_equivalencias.php}
SCRIPT_STOCK=${SCRIPT_STOCK:-importar_stock.php}

CSV_DIR=${CSV_DIR:-$(pwd)}
PRODUCTS_CSV="${PRODUCTS_CSV:-$CSV_DIR/productos.csv}"

EMPRESA_ID=${EMPRESA_ID:-1}
SUCURSAL_ID=${SUCURSAL_ID:-1}
ALMACEN_ID=${ALMACEN_ID:-1}

LIMIT=${LIMIT:-2000}
CHUNK=${CHUNK:-500}

LOG_DIR=${LOG_DIR:-logs}
mkdir -p "$LOG_DIR"
DATESTAMP=$(date +"%Y%m%d_%H%M%S")

# ===== Funciones =====
run_products_paged() {
  if [[ ! -f "$PRODUCTS_CSV" ]]; then
    echo "No existe $PRODUCTS_CSV"; exit 1
  fi
  total=$(( $(wc -l < "$PRODUCTS_CSV") - 1 ))
  if (( total <= 0 )); then
    echo "Csv sin registros ($PRODUCTS_CSV)"; exit 1
  fi
  pages=$(( (total + LIMIT - 1) / LIMIT ))
  echo "Filas: $total | LIMIT=$LIMIT | pages=$pages"

  for ((i=0;i<pages;i++)); do
    off=$(( i * LIMIT ))
    echo "==> productos offset=$off limit=$LIMIT"
    set +e
    $PHP "$SCRIPT_CAT_PROD" \
      --csv_dir="$CSV_DIR" \
      --empresa_id="$EMPRESA_ID" --sucursal_id="$SUCURSAL_ID" --almacen_id="$ALMACEN_ID" \
      --only=categorias,marcas,modelos,productos \
      --offset="$off" --limit="$LIMIT" --chunk_size="$CHUNK" \
      > "$LOG_DIR/prod_${DATESTAMP}_off${off}.json" 2>&1
    rc=$?
    set -e
    if (( rc != 0 )); then
      echo "Fallo en offset=$off (rc=$rc). Reintentando una vez..."
      $PHP "$SCRIPT_CAT_PROD" \
        --csv_dir="$CSV_DIR" \
        --empresa_id="$EMPRESA_ID" --sucursal_id="$SUCURSAL_ID" --almacen_id="$ALMACEN_ID" \
        --only=categorias,marcas,modelos,productos \
        --offset="$off" --limit="$LIMIT" --chunk_size="$CHUNK" \
        >> "$LOG_DIR/prod_${DATESTAMP}_off${off}.json" 2>&1
    fi
  done
  echo "Listo. Logs: $LOG_DIR/prod_${DATESTAMP}_*.json"
}

run_precios() {
  $PHP "$SCRIPT_CAT_PROD" --csv_dir="$CSV_DIR" \
    --empresa_id="$EMPRESA_ID" --sucursal_id="$SUCURSAL_ID" --almacen_id="$ALMACEN_ID" \
    --only=precios_sucursal \
    > "$LOG_DIR/precios_${DATESTAMP}.json" 2>&1
  echo "Listo. Log: $LOG_DIR/precios_${DATESTAMP}.json"
}

run_costos() {
  $PHP "$SCRIPT_COST_EQ" --csv_dir="$CSV_DIR" \
    --empresa_id="$EMPRESA_ID" --sucursal_id="$SUCURSAL_ID" --almacen_id="$ALMACEN_ID" \
    --only=costos_iniciales \
    > "$LOG_DIR/costos_${DATESTAMP}.json" 2>&1
  echo "Listo. Log: $LOG_DIR/costos_${DATESTAMP}.json"
}

run_equivalencias() {
  $PHP "$SCRIPT_COST_EQ" --csv_dir="$CSV_DIR" \
    --empresa_id="$EMPRESA_ID" --sucursal_id="$SUCURSAL_ID" --almacen_id="$ALMACEN_ID" \
    --only=equivalencias \
    > "$LOG_DIR/equivalencias_${DATESTAMP}.json" 2>&1
  echo "Listo. Log: $LOG_DIR/equivalencias_${DATESTAMP}.json"
}

run_stock() {
  $PHP "$SCRIPT_STOCK" --csv_dir="$CSV_DIR" \
    --empresa_id="$EMPRESA_ID" --sucursal_id="$SUCURSAL_ID" --almacen_id="$ALMACEN_ID" \
    --only=stock \
    > "$LOG_DIR/stock_${DATESTAMP}.json" 2>&1
  echo "Listo. Log: $LOG_DIR/stock_${DATESTAMP}.json"
}

usage() {
  cat <<EOF
Uso:
  # Productos paginados
  CSV_DIR=/ruta LIMIT=2000 CHUNK=500 ./import_all.sh products

  # Solo precios_sucursal
  CSV_DIR=/ruta ./import_all.sh precios

  # Costos iniciales
  CSV_DIR=/ruta ./import_all.sh costos

  # Equivalencias
  CSV_DIR=/ruta ./import_all.sh equivalencias

  # Stock
  CSV_DIR=/ruta ./import_all.sh stock
EOF
}

cmd="${1:-}"
case "$cmd" in
  products)      run_products_paged ;;
  precios)       run_precios ;;
  costos)        run_costos ;;
  equivalencias) run_equivalencias ;;
  stock)         run_stock ;;
  *) usage; exit 1 ;;
esac
