#!/usr/bin/env bash
# ─────────────────────────────────────────────────────────────────────────────
# erp_module 테스트 데이터 시드 — 실제 API 로 일관성 있게 넣고 "남겨둔다"
#
#   생성: 카테고리 "E2E샘플동" → 부모 자리타입 2종(관리비/정상가)
#         → 자리 2개(샘플-A동/샘플-B동) + 배치도 셀 → A동에 자리전용 타입 1개(독립)
#   인증용 임시 master 계정만 종료 시 삭제하고, 안치단/배치도 데이터는 보존한다.
#
#   사용:   bash bin/seed_test_data.sh
#   정리:   스크립트가 끝에 출력하는 "정리 SQL" 1줄 실행
# ─────────────────────────────────────────────────────────────────────────────
set -uo pipefail
DB="erp_module"; HOST="erp_module.acux.store"; BASE="http://127.0.0.1"
JAR="$(mktemp)"; TMP="$(mktemp -d)"
QA_USER="qa_seed_$$"; QA_PW="QaSeed!$$x"; QA_ACC_ID=""
CAT_NAME="E2E샘플동"

mq(){ mysql -N -u root "$DB" -e "$1" 2>/dev/null; }
curlh(){ curl -s -H "Host: $HOST" -c "$JAR" -b "$JAR" "$@"; }
say(){ printf '  %s\n' "$1"; }
stage(){ printf '\n\033[1m━━ %s\033[0m\n' "$1"; }

cleanup_account(){ [ -n "$QA_ACC_ID" ] && mq "DELETE FROM accounts WHERE id=$QA_ACC_ID"; rm -rf "$JAR" "$TMP"; }
trap cleanup_account EXIT

if [ "$(mq "SELECT COUNT(*) FROM burial_categories WHERE name='$CAT_NAME'")" != "0" ]; then
  echo "이미 '$CAT_NAME' 카테고리가 있습니다. 중복 시드 방지를 위해 중단합니다."
  echo "정리하려면: mysql -u root $DB -e \"SET @c=(SELECT id FROM burial_categories WHERE name='$CAT_NAME'); DELETE FROM burial_spot_cells WHERE spot_id IN (SELECT id FROM burial_spots WHERE category_id=@c); DELETE FROM burial_spot_custom_types WHERE spot_id IN (SELECT id FROM burial_spots WHERE category_id=@c); DELETE FROM burial_spots WHERE category_id=@c; DELETE FROM burial_category_spot_types WHERE category_id=@c; DELETE FROM burial_categories WHERE id=@c;\""
  exit 1
fi

stage "로그인 (임시 master 계정)"
HASH=$(php -r 'echo password_hash($argv[1], PASSWORD_DEFAULT);' "$QA_PW")
mq "INSERT INTO accounts (user_id,user_password,name,roles_id,is_active,created_at) VALUES ('$QA_USER','$HASH','QA SEED',1,1,NOW())"
QA_ACC_ID=$(mq "SELECT id FROM accounts WHERE user_id='$QA_USER' LIMIT 1")
curlh "$BASE/login" > "$TMP/l.html"
FCSRF=$(grep -o 'name="_csrf_token" value="[^"]*"' "$TMP/l.html" | head -1 | sed 's/.*value="\([^"]*\)".*/\1/')
curlh -o /dev/null --data-urlencode "mb_id=$QA_USER" --data-urlencode "mb_password=$QA_PW" --data-urlencode "_csrf_token=$FCSRF" "$BASE/admin/index.php"
curlh "$BASE/setup-map-basic" > "$TMP/b.html"
CSRF=$(grep -o '<meta name="csrf-token" content="[^"]*"' "$TMP/b.html" | head -1 | sed 's/.*content="\([^"]*\)".*/\1/')
[ -n "$CSRF" ] && say "✓ 로그인 완료" || { echo "✗ 로그인 실패 — 중단"; exit 1; }
apipost(){ curlh -H "Content-Type: application/json" -H "X-CSRF-TOKEN: $CSRF" -X POST --data "$2" "$BASE$1"; }

stage "1. 카테고리 생성"
apipost "/setting/api/burial_categories.php" "{\"name\":\"$CAT_NAME\",\"spot_type\":\"ossuary\",\"description\":\"테스트용 샘플 안치단\",\"sort_order\":50,\"is_active\":1}" >/dev/null
CAT_ID=$(mq "SELECT id FROM burial_categories WHERE name='$CAT_NAME' LIMIT 1")
say "✓ 카테고리 '$CAT_NAME' (#$CAT_ID)"

stage "2. 부모 자리타입 2종 (관리비/정상가)"
apipost "/setting/api/burial_category_spot_types.php" "{\"category_id\":$CAT_ID,\"name\":\"개인단\",\"cols\":1,\"capacity\":1,\"is_communal\":0,\"maintenance_fee\":30000,\"list_price\":3000000,\"bg_color\":\"#dbeafe\",\"border_color\":\"#93c5fd\",\"sort_order\":1}" >/dev/null
apipost "/setting/api/burial_category_spot_types.php" "{\"category_id\":$CAT_ID,\"name\":\"부부단\",\"cols\":1,\"capacity\":2,\"is_communal\":1,\"maintenance_fee\":50000,\"list_price\":8000000,\"bg_color\":\"#fde68a\",\"border_color\":\"#f59e0b\",\"sort_order\":2}" >/dev/null
T_GAEIN=$(mq "SELECT id FROM burial_category_spot_types WHERE category_id=$CAT_ID AND name='개인단' AND deleted_at IS NULL LIMIT 1")
T_BUBU=$(mq "SELECT id FROM burial_category_spot_types WHERE category_id=$CAT_ID AND name='부부단' AND deleted_at IS NULL LIMIT 1")
say "✓ 개인단(#$T_GAEIN, 3만/3백만) · 부부단(#$T_BUBU, 5만/8백만)"

stage "3. 자리 2개 + 배치도 셀"
mkgrid(){ # $1=label_prefix $2=rows $3=cols $4=type_key  → grid JSON
  php -r '
    $p=$argv[1];$rows=(int)$argv[2];$cols=(int)$argv[3];$tk=$argv[4];$cells=[];
    for($r=0;$r<$rows;$r++){$row=[];for($c=0;$c<$cols;$c++){$row[]=["type"=>$tk,"label"=>$p.((($rows-$r))).str_pad((string)($c+1),2,"0",STR_PAD_LEFT)];}$cells[]=$row;}
    echo json_encode(["sections"=>[["name"=>"","rows"=>$rows,"cols"=>$cols,"cells"=>$cells]]],JSON_UNESCAPED_UNICODE);
  ' "$1" "$2" "$3" "$4"; }

apipost "/setting/api/burial_spots.php" "{\"category_id\":$CAT_ID,\"spot_no\":\"샘플-A동\",\"spot_label\":\"샘플 A동\",\"status\":\"available\",\"memo\":\"\"}" >/dev/null
apipost "/setting/api/burial_spots.php" "{\"category_id\":$CAT_ID,\"spot_no\":\"샘플-B동\",\"spot_label\":\"샘플 B동\",\"status\":\"available\",\"memo\":\"\"}" >/dev/null
SP_A=$(mq "SELECT id FROM burial_spots WHERE category_id=$CAT_ID AND spot_no='샘플-A동' AND deleted_at IS NULL LIMIT 1")
SP_B=$(mq "SELECT id FROM burial_spots WHERE category_id=$CAT_ID AND spot_no='샘플-B동' AND deleted_at IS NULL LIMIT 1")
GA=$(mkgrid "A-" 3 3 "st_$T_GAEIN")
GB=$(mkgrid "B-" 2 3 "st_$T_BUBU")
apipost "/setting/api/burial_spot_cells.php" "{\"action\":\"save_grid\",\"spot_id\":$SP_A,\"grid_data\":$GA}" >/dev/null
apipost "/setting/api/burial_spot_cells.php" "{\"action\":\"save_grid\",\"spot_id\":$SP_B,\"grid_data\":$GB}" >/dev/null
NA=$(mq "SELECT COUNT(*) FROM burial_spot_cells WHERE spot_id=$SP_A")
NB=$(mq "SELECT COUNT(*) FROM burial_spot_cells WHERE spot_id=$SP_B")
say "✓ A동(#$SP_A) 3×3 셀 $NA개 · B동(#$SP_B) 2×3 셀 $NB개"

stage "4. A동에 자리전용 타입(독립) — 개인단을 A동만 다른 값으로"
apipost "/setting/api/burial_spot_custom_types.php" "{\"spot_id\":$SP_A,\"source_type_id\":$T_GAEIN,\"name\":\"개인단(A동특가)\",\"cols\":1,\"capacity\":1,\"is_communal\":0,\"maintenance_fee\":20000,\"list_price\":2500000,\"bg_color\":\"#bbf7d0\",\"border_color\":\"#22c55e\",\"sort_order\":1,\"replace_source\":false}" >/dev/null
CH=$(mq "SELECT id FROM burial_spot_custom_types WHERE spot_id=$SP_A AND name='개인단(A동특가)' AND deleted_at IS NULL LIMIT 1")
say "✓ A동 전용 '개인단(A동특가)'(#$CH, 2만/250만) — 부모 개인단(3만/300만)은 그대로"

stage "완료 — 남겨둔 테스트 데이터"
say "카테고리:   #$CAT_ID  $CAT_NAME"
say "자리타입:   개인단 #$T_GAEIN, 부부단 #$T_BUBU (+ A동전용 #$CH)"
say "자리:       샘플-A동 #$SP_A, 샘플-B동 #$SP_B"
printf '\n  \033[1m▶ 안치단 화면:\033[0m  http://%s/niche?type=%s\n' "$HOST" "$CAT_ID"
printf '  \033[1m▶ 배치도 설정:\033[0m  http://%s/setup-map-detail\n' "$HOST"
printf '\n  \033[2m정리 SQL (한 줄):\033[0m\n'
printf "  mysql -u root %s -e \"SET @c=%s; DELETE FROM burial_spot_cells WHERE spot_id IN (SELECT id FROM burial_spots WHERE category_id=@c); DELETE FROM burial_spot_custom_types WHERE spot_id IN (SELECT id FROM burial_spots WHERE category_id=@c); DELETE FROM burial_spots WHERE category_id=@c; DELETE FROM burial_category_spot_types WHERE category_id=@c; DELETE FROM burial_categories WHERE id=@c;\"\n" "$DB" "$CAT_ID"
