#!/usr/bin/env bash
# run_all.sh — оркестратор всего пайплайна wb-daily-drops.
# Запускается из корня рабочей папки селлера. Использует .wb-daily-drops.json для настроек.
# JWT берётся из переменной WB_ANALYTICS_JWT (либо подставляется обвязкой Claude из конфига).
#
# Usage:
#   WB_ANALYTICS_JWT="..." bash scripts/run_all.sh [--date YYYY-MM-DD]
#
# Артефакты: insights.json, funnel_raw.json, WB_отчёт_DD-MM-YYYY.xlsx, artifact.html
set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
CONFIG_FILE="${CONFIG_FILE:-.wb-daily-drops.json}"

TARGET_DATE=""
while [[ $# -gt 0 ]]; do
  case "$1" in
    --date) TARGET_DATE="$2"; shift 2 ;;
    *) echo "Unknown arg: $1" >&2; exit 1 ;;
  esac
done

if [[ -z "${WB_ANALYTICS_JWT:-}" ]]; then
  echo "ERROR: WB_ANALYTICS_JWT not set" >&2
  exit 3
fi

if [[ ! -f "$CONFIG_FILE" ]]; then
  echo "ERROR: $CONFIG_FILE not found. Run onboarding first." >&2
  exit 3
fi

# Парсим selection из конфига через python
SELECTION_ARGS=$(python3 - <<EOF
import json, shlex
with open("$CONFIG_FILE", encoding="utf-8") as f:
    cfg = json.load(f)
sel = cfg.get("selection", {})
mode = sel.get("mode", "top_revenue")
args = ["--selection", mode]
if mode == "top_revenue":
    args += ["--top-n", str(sel.get("top_n", 200))]
elif mode == "sku_list":
    args += ["--sku-list", ",".join(str(x) for x in sel.get("sku_list", []))]
elif mode == "category":
    args += ["--category", sel.get("category", "")]
print(" ".join(shlex.quote(a) for a in args))
EOF
)

DATE_ARGS=""
if [[ -n "$TARGET_DATE" ]]; then
  DATE_ARGS="--target-date $TARGET_DATE"
fi

echo "[run_all] Step 1/5: fetch funnel" >&2
set +e
python3 "$SCRIPT_DIR/fetch_funnel.py" $DATE_ARGS $SELECTION_ARGS --output funnel_raw.json
RC=$?
set -e
if [[ $RC -eq 2 ]]; then
  echo "[run_all] target date data not yet loaded by WB. Suggesting to schedule a retry in 2h." >&2
  exit 2
fi
if [[ $RC -ne 0 ]]; then
  echo "[run_all] fetch_funnel.py failed with code $RC" >&2
  exit $RC
fi

echo "[run_all] Step 2/5: detect drops & growths" >&2
python3 "$SCRIPT_DIR/detect_drops.py" --funnel funnel_raw.json --config "$CONFIG_FILE" --output insights.json

echo "[run_all] Step 3/5: enrich in parallel (stocks/ads/prices/reviews)" >&2
# Stocks нельзя параллелить с другими — WB rate-limit 1/min на статистику. Запускаем последовательно.
python3 "$SCRIPT_DIR/enrich_stocks.py" --insights insights.json &
STOCKS_PID=$!
python3 "$SCRIPT_DIR/enrich_prices.py" --insights insights.json &
PRICES_PID=$!
python3 "$SCRIPT_DIR/enrich_reviews.py" --insights insights.json &
REVIEWS_PID=$!
wait $STOCKS_PID || echo "[run_all] WARN: enrich_stocks failed"
wait $PRICES_PID || echo "[run_all] WARN: enrich_prices failed"
wait $REVIEWS_PID || echo "[run_all] WARN: enrich_reviews failed"
# Реклама тяжелее — отдельно
python3 "$SCRIPT_DIR/enrich_ads.py" --insights insights.json || echo "[run_all] WARN: enrich_ads failed"

TARGET_DATE_FROM_JSON=$(python3 -c 'import json,sys;print(json.load(open("insights.json"))["target_date"])')
TARGET_DATE_DDMMYYYY=$(python3 -c "
import datetime as d
print(d.date.fromisoformat('$TARGET_DATE_FROM_JSON').strftime('%d-%m-%Y'))
")

EXCEL_OUT="WB_утренний_отчёт_${TARGET_DATE_DDMMYYYY}.xlsx"
ARTIFACT_OUT="artifact.html"

echo "[run_all] Step 4/5: build Excel → $EXCEL_OUT" >&2
python3 "$SCRIPT_DIR/build_excel.py" --insights insights.json --funnel funnel_raw.json --output "$EXCEL_OUT"

echo "[run_all] Step 5/5: build Live HTML artifact → $ARTIFACT_OUT" >&2
python3 "$SCRIPT_DIR/build_artifact.py" --insights insights.json --funnel funnel_raw.json --output "$ARTIFACT_OUT"

echo "[run_all] DONE" >&2
echo "{\"excel\": \"$EXCEL_OUT\", \"artifact\": \"$ARTIFACT_OUT\", \"target_date\": \"$TARGET_DATE_FROM_JSON\"}"
