#!/usr/bin/env bash
# ============================================================
#  pytcper TCP调试助手 - Linux 可执行文件构建脚本
#  说明:PyInstaller 不支持交叉编译,必须在 Linux x86_64 环境
#        运行(需要 Python 3.8+ 且已安装 tkinter 与 PyInstaller),
#        本脚本会自动完成依赖安装并用两种方式打包:
#          1) build/            —— 目录方式产物(pytcper 二进制,运行快)
#          2) dist-linux/       —— 单文件方式产物(可分发给无Python机器)
# ============================================================
set -euo pipefail
cd "$(dirname "$0")"

echo "==> 检查 Python / tkinter ..."
PYTHON=${PYTHON:-python3}
if ! command -v "$PYTHON" >/dev/null 2>&1; then
    echo "错误:找不到 python3,请先安装 Python 3.8+。"; exit 1
fi
"$PYTHON" -c "import tkinter" 2>/dev/null \
    || { echo "错误:未安装 tkinter。Debian/Ubuntu: apt install python3-tk  |  Fedora: dnf install python3-tkinter"; exit 1; }
version=$("$PYTHON" --version 2>&1)
echo "    使用 $version"

echo "==> 安装 PyArmor(源码加密)+ PyInstaller(打包)..."
"$PYTHON" -m pip install --upgrade pyarmor pyinstaller \
    || "$PYTHON" -m pip install --upgrade pyarmor pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple

echo "==> 1) 用 PyArmor 加密源码到 obf/ ..."
PYARMOR=$("$PYTHON" -c "import sys,glob;print([p for p in glob.glob(sys.prefix+'/../*/pyarmor') or glob.glob(sys.prefix+'/bin/pyarmor')][0])" 2>/dev/null || echo pyarmor)
"$PYTHON" -m pyarmor gen -O obf tcp_debug_tool.py tcp_utils.py base_tab.py client_tab.py server_tab.py app.py

echo "==> 2) 打包 Linux 二进制(目录方式)..."
"$PYTHON" -m PyInstaller --name pytcper \
    --add-data "obf:obf" \
    --paths obf \
    --windowed \
    --clean \
    tcp_debug_tool.py

echo "==> 3) 打包单文件 Linux 二进制(分发用)..."
"$PYTHON" -m PyInstaller --onefile --name pytcper \
    --add-data "obf:obf" \
    --paths obf \
    --windowed \
    --clean \
    tcp_debug_tool.py

echo "==> 完成。产物:"
echo "    build/pytcper/         目录方式(直接运行 ./build/pytcper/pytcper)"
echo "    dist-linux/pytcper     单文件(分发给其它 Linux 机器直接运行)"

echo "==> 运行验证(后台拉起 GUI,3 秒后结束):"
./build/pytcper/pytcper & PID=$!
sleep 3
if kill -0 "$PID" 2>/dev/null; then
    echo "OK:二进制正常进入 GUI 事件循环。"
    kill "$PID" 2>/dev/null || true
else
    echo "警告:二进制未能持续运行,请查看上方报错。"
fi