#!/usr/bin/env bash
# Run complete Shopify publish(s) after the normalization/priming one-time service
# has completed successfully.
#
# Typical systemd chaining:
#   plytixmage-onetime.service
#     OnSuccess=plytixmage-post-shopify-full.service
#
# Usage:
#   ./scripts/push_shopify_full_after_normalize.sh
#   SHOPIFY_CONNECTION_IDS="7 9" ./scripts/push_shopify_full_after_normalize.sh
#
# Env:
#   APP_ROOT                  PlytixMage root (default: script parent/..)
#   VENV_DIR                  Virtualenv directory (default: $APP_ROOT/.venv)
#   PYTHON                    Python interpreter override
#   LOG_DIR                   Log directory (default: $APP_ROOT/logs)
#   STATUS_FILE               Prior normalize status file to verify first
#                             (default: $LOG_DIR/normalize_prime_magento_latest.status)
#   REQUIRE_SUCCESS_STATUS    1 = require STATUS_FILE to begin with "ok:" (default: 1)
#   SHOPIFY_CONNECTION_IDS    Space-separated Shopify native connection ids (default: "")
#   SHOPIFY_BATCH_SIZE        Batch size for channel_full_publish (default: 500)
#   SHOPIFY_WAIT_TIMEOUT      Wait timeout seconds for publish job phases (default: 7200)
#   SHOPIFY_INCLUDE_UNASSIGNED 1 = publish all active masters, not only assigned SKUs (default: 0)
#   SHOPIFY_SKIP_TAXONOMY     1 = skip taxonomy stage (default: 0)
#   SHOPIFY_SKIP_COLLECTIONS  1 = skip collection landing push stage (default: 0)

set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
APP_ROOT="$(cd "${APP_ROOT:-$SCRIPT_DIR/..}" && pwd)"
VENV_DIR="${VENV_DIR:-$APP_ROOT/.venv}"
if [[ -z "${PYTHON:-}" ]]; then
  if [[ -x "$VENV_DIR/bin/python" ]]; then
    PYTHON="$VENV_DIR/bin/python"
  else
    PYTHON="python"
  fi
fi

LOG_DIR="${LOG_DIR:-$APP_ROOT/logs}"
STATUS_FILE="${STATUS_FILE:-$LOG_DIR/normalize_prime_magento_latest.status}"
REQUIRE_SUCCESS_STATUS="${REQUIRE_SUCCESS_STATUS:-1}"
SHOPIFY_CONNECTION_IDS="${SHOPIFY_CONNECTION_IDS:-}"
SHOPIFY_BATCH_SIZE="${SHOPIFY_BATCH_SIZE:-500}"
SHOPIFY_WAIT_TIMEOUT="${SHOPIFY_WAIT_TIMEOUT:-7200}"
SHOPIFY_INCLUDE_UNASSIGNED="${SHOPIFY_INCLUDE_UNASSIGNED:-0}"
SHOPIFY_SKIP_TAXONOMY="${SHOPIFY_SKIP_TAXONOMY:-0}"
SHOPIFY_SKIP_COLLECTIONS="${SHOPIFY_SKIP_COLLECTIONS:-0}"

mkdir -p "$LOG_DIR"
STAMP="$(date -u +%Y%m%dT%H%M%SZ)"
LOG_FILE="$LOG_DIR/post_normalize_shopify_full_${STAMP}.log"

cd "$APP_ROOT"
export PYTHONUNBUFFERED=1

exec > >(tee -a "$LOG_FILE") 2>&1

echo "=== post-normalize shopify full publish ==="
echo "started_utc=$STAMP"
echo "app_root=$APP_ROOT"
echo "status_file=$STATUS_FILE"
echo "shopify_connection_ids=$SHOPIFY_CONNECTION_IDS"
echo "shopify_batch_size=$SHOPIFY_BATCH_SIZE"
echo "shopify_wait_timeout=$SHOPIFY_WAIT_TIMEOUT"
echo "shopify_include_unassigned=$SHOPIFY_INCLUDE_UNASSIGNED"
echo "shopify_skip_taxonomy=$SHOPIFY_SKIP_TAXONOMY"
echo "shopify_skip_collections=$SHOPIFY_SKIP_COLLECTIONS"
echo "python=$PYTHON ($("$PYTHON" --version 2>&1 || true))"
echo "log_file=$LOG_FILE"
echo

fail() {
  local step="$1"
  local code="$2"
  echo "FAILED step=$step exit=$code"
  exit "$code"
}

run_step() {
  local name="$1"
  shift
  echo
  echo "------------------------------------------------------------"
  echo "STEP: $name"
  echo "CMD: $*"
  echo "started: $(date -u +%Y-%m-%dT%H:%M:%SZ)"
  echo "------------------------------------------------------------"
  if "$@"; then
    echo "OK: $name ($(date -u +%Y-%m-%dT%H:%M:%SZ))"
  else
    local code=$?
    fail "$name" "$code"
  fi
}

if [[ "$REQUIRE_SUCCESS_STATUS" == "1" ]]; then
  if [[ ! -f "$STATUS_FILE" ]]; then
    echo "Refusing to run: missing status file $STATUS_FILE"
    exit 3
  fi
  STATUS_CONTENT="$(cat "$STATUS_FILE" 2>/dev/null || true)"
  if [[ "$STATUS_CONTENT" != ok:* ]]; then
    echo "Refusing to run: prior normalize status is not successful"
    echo "status_content=$STATUS_CONTENT"
    exit 4
  fi
fi

if [[ -z "${SHOPIFY_CONNECTION_IDS// }" ]]; then
  echo "No SHOPIFY_CONNECTION_IDS configured; nothing to do."
  exit 0
fi

for connection_id in $SHOPIFY_CONNECTION_IDS; do
  CMD=(
    "$PYTHON" -m app.jobs.channel_full_publish
    --apply
    --channel shopify
    --shopify-connection-id "$connection_id"
    --batch-size "$SHOPIFY_BATCH_SIZE"
    --wait-timeout "$SHOPIFY_WAIT_TIMEOUT"
  )
  if [[ "$SHOPIFY_INCLUDE_UNASSIGNED" == "1" ]]; then
    CMD+=(--include-unassigned)
  fi
  if [[ "$SHOPIFY_SKIP_TAXONOMY" == "1" ]]; then
    CMD+=(--skip-taxonomy)
  fi
  if [[ "$SHOPIFY_SKIP_COLLECTIONS" == "1" ]]; then
    CMD+=(--skip-collections)
  fi
  run_step "push_shopify_full_conn_${connection_id}" "${CMD[@]}"
done

echo
echo "=== completed successfully $(date -u +%Y-%m-%dT%H:%M:%SZ) ==="
echo "log_file=$LOG_FILE"
