#!/bin/bash

# 颜色定义
GREEN='\033[0;32m'
RED='\033[0;31m'
NC='\033[0m' # No Color
INFO="${GREEN}[INFO]${NC}"
ERROR="${RED}[ERROR]${NC}"

# 错误处理
set -e
trap 'echo -e "${ERROR} 部署失败，请检查上方错误日志。"' ERR

echo -e "${INFO} 开始自动化部署脚本..."

# 1. 检查并安装系统级依赖
echo -e "${INFO} 1/6 检查并安装系统依赖..."
if command -v apt-get &> /dev/null; then
    sudo apt-get update
    # 基础构建工具
    sudo apt-get install -y build-essential python3-dev pkg-config
    # WeasyPrint 依赖
    sudo apt-get install -y libpango-1.0-0 libpangoft2-1.0-0 libgdk-pixbuf-2.0-0 shared-mime-info
    # Python 虚拟环境支持
    sudo apt-get install -y python3-venv python3-pip
else
    echo -e "${ERROR} 仅支持 Debian/Ubuntu 系统，请手动安装相关依赖。"
    exit 1
fi

# 2. 安装 Node.js 依赖 (PM2)
echo -e "${INFO} 2/6 检查并安装全局 Node.js 工具..."
if ! command -v pm2 &> /dev/null; then
    echo "安装 PM2..."
    sudo npm install -g pm2
fi

# 3. 创建并激活 Python 虚拟环境
echo -e "${INFO} 3/6 设置 Python 虚拟环境..."
if [ ! -d ".venv" ]; then
    python3 -m venv .venv
fi
source .venv/bin/activate

# 4. 安装 Python 项目依赖
echo -e "${INFO} 4/6 安装 Python 依赖..."
pip install --upgrade pip
pip install -r requirements.txt

# 5. 初始化数据库
echo -e "${INFO} 5/6 初始化数据库..."
if [ -f "create_db.py" ]; then
    python create_db.py
else
    echo -e "${ERROR} 找不到 create_db.py，跳过数据库初始化。"
fi

# 6. 启动服务
echo -e "${INFO} 6/6 启动服务..."

# 如果是生产环境部署前端
if [ "$1" == "prod" ]; then
    echo "构建前端..."
    cd frontend
    npm install
    npm run build
    cd ..
    # 修改 ecosystem.config.js 指向 build (如果是临时修改建议手动操作，这里演示默认 dev 模式)
    echo -e "${INFO} 请确保 ecosystem.config.js 已配置为生产模式启动 (npm start)"
else
    # 开发模式
    cd frontend
    npm install
    cd ..
fi

# 重启 PM2
pm2 delete all 2>/dev/null || true
pm2 start ecosystem.config.js

echo -e "${INFO} =================================================="
echo -e "${INFO} 部署成功！"
echo -e "${INFO} 后端 API: http://localhost:8000"
echo -e "${INFO} 前端 页面: http://localhost:3000"
echo -e "${INFO} 使用 'pm2 list' 查看服务状态"
echo -e "${INFO} 使用 'pm2 logs' 查看日志"
echo -e "${INFO} =================================================="
