#!/usr/bin/env bash
set -euo pipefail

scenario="${1:-}"
case "$scenario" in
  cairo|mansoura|riyadh|london|fraud|duplicate|out_of_stock|review) ;;
  *)
    echo "Usage: $0 <cairo|mansoura|riyadh|london|fraud|duplicate|out_of_stock|review>" >&2
    exit 64
    ;;
esac

webhook_url="${N8N_WEBHOOK_URL:-}"
if [ -z "$webhook_url" ]; then
  if [ -z "${N8N_DOMAIN:-}" ]; then
    echo "Set N8N_WEBHOOK_URL or N8N_DOMAIN." >&2
    exit 1
  fi
  webhook_url="https://${N8N_DOMAIN}/webhook/orders"
fi
if [ -z "${ORDER_WEBHOOK_KEY:-}" ]; then
  echo "ORDER_WEBHOOK_KEY is required." >&2
  exit 1
fi

run_id="${SCENARIO_RUN_ID:-$(date +%s%N)}"
digits="$(printf %s "$run_id" | tr -cd '0-9')"
suffix8="$(printf '10000000%s' "$digits" | tail -c 8)"
suffix6="$(printf '100000%s' "$digits" | tail -c 6)"

post_order() {
  curl --fail-with-body --silent --show-error \
    --request POST \
    --header "X-Api-Key: ${ORDER_WEBHOOK_KEY}" \
    --header "Content-Type: application/json" \
    --data "$1" \
    "$webhook_url"
}

payload() {
  local external_id="$1"
  local name="$2"
  local phone="$3"
  local email="$4"
  local address="$5"
  local city="$6"
  local governorate="$7"
  local country="$8"
  local sku="$9"
  local qty="${10}"
  local unit_price="${11}"
  jq -cn \
    --arg externalId "$external_id" \
    --arg name "$name" \
    --arg phone "$phone" \
    --arg email "$email" \
    --arg address "$address" \
    --arg city "$city" \
    --arg governorate "$governorate" \
    --arg country "$country" \
    --arg sku "$sku" \
    --argjson qty "$qty" \
    --argjson unitPrice "$unit_price" \
    '{
      externalId: $externalId,
      source: "smoke-test",
      customer: {name: $name, phone: $phone, email: $email},
      shipping: {address: $address, city: $city, governorate: $governorate, country: $country},
      items: [{sku: $sku, qty: $qty, unitPrice: $unitPrice}],
      shippingFee: 0,
      currency: "EGP",
      notes: "automated scenario"
    }'
}

case "$scenario" in
  cairo)
    request="$(payload "smoke-cairo-${run_id}" "أحمد محمد" "010${suffix8}" "cairo-${run_id}@example.com" "12 شارع مصطفى النحاس مدينة نصر القاهرة" "مدينة نصر" "القاهرة" "EG" "SKU-PROD-001" 1 150)"
    post_order "$request"
    ;;
  mansoura)
    request="$(payload "smoke-mansoura-${run_id}" "منى السيد" "011${suffix8}" "mansoura-${run_id}@example.com" "25 شارع الجمهورية المنصورة الدقهلية" "المنصورة" "الدقهلية" "EG" "SKU-PROD-001" 1 150)"
    post_order "$request"
    ;;
  riyadh)
    request="$(payload "smoke-riyadh-${run_id}" "Fahad Saleh" "05${suffix8}" "riyadh-${run_id}@example.com" "King Fahd Road Al Olaya Riyadh Saudi Arabia" "Riyadh" "Riyadh" "SA" "SKU-PROD-001" 1 150)"
    post_order "$request"
    ;;
  london)
    request="$(payload "smoke-london-${run_id}" "John Smith" "+447700${suffix6}" "london-${run_id}@example.com" "10 Downing Street Westminster London United Kingdom" "London" "London" "GB" "SKU-PROD-001" 1 150)"
    post_order "$request"
    ;;
  fraud)
    request="$(payload "smoke-fraud-${run_id}" "Blocked Address" "201099999999" "fraud-${run_id}@example.com" "عنوان وهمي محظور في القاهرة" "القاهرة" "القاهرة" "EG" "SKU-PROD-001" 1 150)"
    post_order "$request"
    ;;
  review)
    request="$(payload "smoke-review-${run_id}" "test" "012${suffix8}" "review-${run_id}@example.com" "Cairo short" "Cairo" "Cairo" "EG" "SKU-PROD-003" 1 3501)"
    post_order "$request"
    ;;
  out_of_stock)
    request="$(payload "smoke-oos-${run_id}" "عميل نفاد المخزون" "015${suffix8}" "oos-${run_id}@example.com" "18 شارع النصر مدينة نصر القاهرة" "مدينة نصر" "القاهرة" "EG" "SKU-PROD-001" 999 150)"
    post_order "$request"
    ;;
  duplicate)
    duplicate_phone="010${suffix8}"
    first_request="$(payload "smoke-duplicate-a-${run_id}" "سارة محمود" "$duplicate_phone" "duplicate-${run_id}@example.com" "20 شارع التحرير الدقي الجيزة" "الدقي" "الجيزة" "EG" "SKU-PROD-001" 1 150)"
    second_request="$(payload "smoke-duplicate-b-${run_id}" "سارة محمود" "$duplicate_phone" "duplicate-${run_id}@example.com" "20 شارع التحرير الدقي الجيزة" "الدقي" "الجيزة" "EG" "SKU-PROD-001" 1 150)"
    first="$(post_order "$first_request")"
    second="$(post_order "$second_request")"
    jq -cn --argjson first "$first" --argjson second "$second" '{first: $first, second: $second}'
    ;;
esac
