#!/bin/bash

# 停止转录服务
sudo systemctl stop transcription

# 创建应用目录并设置所有者
sudo mkdir -p /opt/transcription-app
sudo chown $USER:$USER /opt/transcription-app

# 复制应用文件
cp app.py /opt/transcription-app/
cp -r templates /opt/transcription-app/
cp requirements.txt /opt/transcription-app/
cp scripts/reset_db.py /opt/transcription-app/
cp scripts/create_admin.py /opt/transcription-app/
cp .env /opt/transcription-app/  # 复制包含 API 密钥的 .env 文件

# 如果 .env 文件中不存在 SECRET_KEY，则添加
if ! grep -q "SECRET_KEY" /opt/transcription-app/.env; then
    echo "SECRET_KEY=$(openssl rand -hex 32)" >> /opt/transcription-app/.env
    echo "已添加 SECRET_KEY 到 .env 文件"
fi

# 创建并激活虚拟环境
python3 -m venv /opt/transcription-app/venv
source /opt/transcription-app/venv/bin/activate

# 安装依赖
cd /opt/transcription-app
pip install -r requirements.txt

# 创建上传和数据库目录并设置权限
mkdir -p /opt/transcription-app/uploads
mkdir -p /opt/transcription-app/instance
chmod 755 /opt/transcription-app/uploads
chmod 755 /opt/transcription-app/instance

# 初始化或迁移数据库
if [ ! -f /opt/transcription-app/instance/transcriptions.db ]; then
    # 如果数据库不存在，从头创建
    echo "数据库不存在，正在创建新数据库..."
    python reset_db.py
else
    # 如果数据库存在，迁移模式以保留数据
    echo "数据库已存在，正在迁移模式以保留数据..."
    python migrate_db.py
fi

# 设置所有文件的正确所有者
sudo chown -R $USER:$USER /opt/transcription-app

# 创建 systemd 服务文件
sudo tee /etc/systemd/system/transcription.service << EOF
[Unit]
Description=Transcription Web Application
After=network.target

[Service]
User=$USER
EnvironmentFile=/opt/transcription-app/.env
WorkingDirectory=/opt/transcription-app
Environment="PATH=/opt/transcription-app/venv/bin"
Environment="PYTHONPATH=/opt/transcription-app"
ExecStart=/opt/transcription-app/venv/bin/gunicorn --workers 3 --threads 8 --bind 0.0.0.0:8899 --timeout 600 app:app
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

# 重新加载 systemd 并启动服务
sudo systemctl daemon-reload
sudo systemctl restart transcription
sudo systemctl disable transcription
sudo systemctl enable transcription

# 检查服务状态
echo "正在检查服务状态..."
sleep 3
sudo systemctl status transcription

echo "安装完成！应用应在 8899 端口上运行。"

# 询问是否创建管理员账户
read -p "是否现在创建管理员账户？(y/n): " create_admin
if [[ $create_admin == "y" || $create_admin == "Y" ]]; then
    echo "正在创建管理员账户..."
    python create_admin.py
else
    echo "你可以稍后运行以下命令来创建管理员账户：python create_admin.py"
fi
