#!/usr/bin/env bash
# kiem_tra.sh — kiểm sức khoẻ bộ app sau khi cài (3 app · 6 tiến trình · 5 CSDL · agy · đường dẫn).
GOC="$(cd "$(dirname "$0")/.." && pwd)"
cd "$GOC"
PY="$GOC/venv/bin/python"
[ -x "$PY" ] || PY="$(command -v python3)"

echo "════ 1. CỔNG / WEB APP ════"
for CAP in "8100:HLQT (CSDL A)" "8099:CALIB (CSDL B)" "8098:Agent-Lab"; do
  CONG="${CAP%%:*}"; TEN="${CAP#*:}"
  MA="$(curl -s -o /dev/null -w '%{http_code}' --max-time 5 "http://127.0.0.1:$CONG/" || echo '000')"
  if [ "$MA" = "200" ]; then echo "   ✓ $TEN — cổng $CONG — HTTP $MA"
  else echo "   ✗ $TEN — cổng $CONG — HTTP $MA (app chưa chạy? xem logs/)"; fi
done

echo
echo "════ 2. TIẾN TRÌNH ════"
for M in server_hlqt worker_hlqt server_calib worker_calib server_lab worker_lab; do
  SL="$(pgrep -fc "$M" 2>/dev/null || true)"
  [ -n "$SL" ] && [ "$SL" != "0" ] && echo "   ✓ $M ($SL)" || echo "   ✗ $M chưa chạy"
done

echo
echo "════ 3. CSDL (số bảng + vài số dòng) ════"
"$PY" - <<'PYEOF'
import os, sqlite3
D = os.path.join(os.getcwd(), 'data')
CHI_TIET = {'CSDLA.db': ['quy_trinh', 'buoc_quy_trinh', 'huan_luyen', 'danh_muc_mau'],
            'CSDLB.db': ['mau', 'hon_hop', 'hieu_chinh_mau'],
            'CSDLD.db': ['loai_go', 'yeu_to_anh_huong', 'map_buoc_quy_trinh'],
            'CSDLC.db': ['khach_hang', 'kinh_nghiem'],
            'lab.db':   ['viec']}
for ten, bang in CHI_TIET.items():
    p = os.path.join(D, ten)
    if not os.path.exists(p):
        print('   ✗ thiếu %s' % ten); continue
    c = sqlite3.connect(p)
    ds = [x[0] for x in c.execute("select name from sqlite_master where type='table'")]
    chi = []
    for b in bang:
        if b in ds:
            chi.append('%s=%d' % (b, c.execute('select count(*) from %s' % b).fetchone()[0]))
    print('   ✓ %-9s %2d bảng | %s' % (ten, len(ds), ', '.join(chi)))
    c.close()
PYEOF

echo
echo "════ 4. AGY (Antigravity CLI) ════"
AGY="$(python3 -c "import json;print(json.load(open('cai_dat/cau_hinh.json'))['agy_bin'])" 2>/dev/null)"
if command -v "$AGY" >/dev/null 2>&1 || [ -x "$AGY" ]; then
  echo "   ✓ $AGY -> $("$AGY" --version 2>&1 | head -1)"
  echo "   (kiểm model: $AGY models | head -5)"
else
  echo "   ✗ không thấy agy tại '$AGY' — cài: curl -fsSL https://antigravity.google/cli/install.sh | bash"
  echo "     rồi sửa agy_bin trong cai_dat/cau_hinh.json và chạy lại: $PY cai_dat/sua_duong_dan.py"
fi

echo
echo "════ 5. ĐƯỜNG DẪN CÒN SÓT ════"
SOT="$(grep -rnE "C:\\\\|%LOCALAPPDATA%" apps/*/*.py 2>/dev/null | wc -l)"
if [ "$SOT" = "0" ]; then echo "   ✓ không còn đường dẫn Windows trong apps/*/*.py"
else echo "   ✗ còn $SOT dòng — chạy lại: $PY cai_dat/sua_duong_dan.py"; grep -rnE "C:\\\\|%LOCALAPPDATA%" apps/*/*.py | head -5; fi

echo
echo "════ 6. MẬT KHẨU / FILE CẤU HÌNH ════"
for F in apps/hlqt/mat_khau.txt apps/calib/mat_khau.txt apps/lab/mat_khau.txt apps/hlqt/bi_mat.txt apps/calib/bi_mat.txt apps/lab/bi_mat.txt; do
  if [ -f "$F" ]; then
    QUYEN="$(stat -c '%a' "$F" 2>/dev/null || stat -f '%Lp' "$F" 2>/dev/null)"
    echo "   ✓ $F (quyền $QUYEN)"
  else echo "   ✗ thiếu $F"; fi
done
echo
echo "Xong. App: http://127.0.0.1:8100/ · :8099/ · :8098/"
