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

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# shellcheck source=csfzx-common.sh
source "${SCRIPT_DIR}/csfzx-common.sh"

AI_DISH_ID="${AI_DISH_ID:-1002611}"
PC_UUID="${PC_UUID:-5053D981-E23F-CF11-21BC-B49AFE6E7795}"
DISH_NAME="${DISH_NAME:-上线回归菜品_63_168_194053}"
IMG_URL="${IMG_URL:-https://csfzx.yyangpt.cn/zhct_csfzx/static/upload/cater/20260713/A1C054C0-19DD-3740-DFAD-BF0BD296BF59pc-dish-img.png}"
MEAL_DATE="${MEAL_DATE:-$(date +%F)}"
MEAL_TIMES="${MEAL_TIMES:-2}"
RESTAURANT_ID="${RESTAURANT_ID:-1}"
SHOP_ID="${SHOP_ID:-1}"
AREA_ID="${AREA_ID:-1}"

pc_login
miniapp_login

log "小程序下单前置接口"
curl -sS --max-time 20 -X POST "${AI_BASE}?s=/api/restaurant/areaList" \
  -H "Access-Token: ${ACCESS_TOKEN}" -H 'platform: MP-WEIXIN' -H 'env-version: release' -H 'version: 1.0.0' | cut -c1-1000; echo
curl -sS --max-time 20 -X POST "${AI_BASE}?s=/api/restaurant/shopList" \
  -H "Access-Token: ${ACCESS_TOKEN}" -H 'platform: MP-WEIXIN' -H 'env-version: release' -H 'version: 1.0.0' \
  -d "area_id=${AREA_ID}" | cut -c1-1000; echo
curl -sS --max-time 20 -X POST "${AI_BASE}?s=/api/restaurant/list" \
  -H "Access-Token: ${ACCESS_TOKEN}" -H 'platform: MP-WEIXIN' -H 'env-version: release' -H 'version: 1.0.0' \
  -d "restaurant_shop_id=${SHOP_ID}" | cut -c1-1500; echo

log "PC 远程排菜：/p/bill/add"
MENU_DATA=$(PC_UUID="$PC_UUID" DISH_NAME="$DISH_NAME" IMG_URL="$IMG_URL" MEAL_TIMES="$MEAL_TIMES" "$PHP_BIN" -r '
$uuid=getenv("PC_UUID"); $name=getenv("DISH_NAME"); $img=getenv("IMG_URL");
echo json_encode([["uuid"=>$uuid,"name"=>$name,"img"=>$img,"category"=>1,"select"=>true,"meal_times"=>(int)getenv("MEAL_TIMES"),"type"=>1]], JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES);
')
MENU_RESP=$(curl -sS --max-time 30 -X POST "${STORE_BASE}/p/bill/add" \
  -H "Host: ${STORE_HOST}" \
  -H "Cookie: _token=${PC_COOKIE_TOKEN}" \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  --data-urlencode "menu_date=${MEAL_DATE}" \
  --data-urlencode "restaurant_id=${RESTAURANT_ID}" \
  --data-urlencode "data=${MENU_DATA}")
printf '%s\n' "$MENU_RESP"
MENU_CODE=$(printf '%s' "$MENU_RESP" | json_get '$j["code"] ?? ""')
[ "$MENU_CODE" = "0" ] || fail "PC 排菜失败"
pass "PC 排菜接口返回 code=0"

log "小程序菜品列表"
curl -sS --max-time 20 -X POST "${AI_BASE}?s=/api/dishes.dishes/list" \
  -H "Access-Token: ${ACCESS_TOKEN}" -H 'platform: MP-WEIXIN' -H 'env-version: release' -H 'version: 1.0.0' \
  -d "restaurant_id=${RESTAURANT_ID}" -d "meal_times=${MEAL_TIMES}" -d "page=1" -d "page_size=10" | cut -c1-2500; echo

log "小程序购物车 add/list/checkout"
CART_ADD=$(curl -sS --max-time 30 -X POST "${AI_BASE}?s=/api/mealCart/add" \
  -H "Access-Token: ${ACCESS_TOKEN}" -H 'platform: MP-WEIXIN' -H 'env-version: release' -H 'version: 1.0.0' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  --data-urlencode "restaurant_id=${RESTAURANT_ID}" \
  --data-urlencode "meal_date=${MEAL_DATE}" \
  --data-urlencode "meal_times=${MEAL_TIMES}" \
  --data-urlencode "ai_dishes_id=${AI_DISH_ID}" \
  --data-urlencode "quantity=1")
printf '%s\n' "$CART_ADD"
curl -sS --max-time 20 "${AI_BASE}?s=/api/mealCart/list&restaurant_id=${RESTAURANT_ID}&meal_date=${MEAL_DATE}&meal_times=${MEAL_TIMES}" \
  -H "Access-Token: ${ACCESS_TOKEN}" -H 'platform: MP-WEIXIN' -H 'env-version: release' -H 'version: 1.0.0' | cut -c1-2500; echo
curl -sS --max-time 20 "${AI_BASE}?s=/api/mealCheckout/order&restaurant_id=${RESTAURANT_ID}&meal_date=${MEAL_DATE}&meal_times=${MEAL_TIMES}" \
  -H "Access-Token: ${ACCESS_TOKEN}" -H 'platform: MP-WEIXIN' -H 'env-version: release' -H 'version: 1.0.0' | cut -c1-2500; echo

log "排菜落库和设备消息证据"
ob_query "$ZHCT_DB" "SELECT id,dishes_uuid,menu_date,meal_times,restaurant_id,type,create_time FROM ydy_recipes WHERE dishes_uuid='${PC_UUID}' AND menu_date='${MEAL_DATE}' ORDER BY id DESC LIMIT 5;"
ob_query "$ZHCT_DB" "SELECT id,code,name,type,hearttime,FROM_UNIXTIME(hearttime) AS heart_time FROM ydy_equipment WHERE del_flag=0 AND mate_flag=1 AND type IN (2,3,4,7,10) ORDER BY hearttime DESC LIMIT 20;"
ob_query "$ZHCT_DB" "SELECT id,type,receive_device_id,status,publish_time,LEFT(message,260) AS message FROM ydy_mq_message WHERE type=2 ORDER BY id DESC LIMIT 20;"

cat <<'TXT'
通过标准：
1. /p/bill/add 返回 code=0。
2. /api/dishes.dishes/list 返回当日当餐菜品。
3. /api/mealCart/add、/api/mealCart/list、/api/mealCheckout/order 正常。
4. 若存在支持远程排菜的在线设备，ydy_mq_message 出现 type=2 且 receive_device_id 为设备编号。
TXT
