#!/bin/bash
set -euo pipefail

# 安装目录，可按需修改
INSTALL_DIR="/opt/asf"
LOG_FILE="/var/log/asf-install.log"
SCREEN_NAME="asf-install"

if [ "$EUID" -ne 0 ]; then
  echo "请使用 root 权限运行此脚本 (sudo)。"
  exit 1
fi

echo "== ASF 一键安装（首次登录一次后自动自启） =="

# 安装常用依赖
echo "安装依赖..."
if command -v apt >/dev/null 2>&1; then
  apt update -y
  apt install -y wget unzip screen ca-certificates
elif command -v yum >/dev/null 2>&1; then
  yum install -y wget unzip screen ca-certificates
elif command -v apk >/dev/null 2>&1; then
  apk add --no-cache wget unzip screen ca-certificates
else
  echo "无法自动安装依赖，请手动安装 wget unzip screen ca-certificates"
fi

# 创建目录
mkdir -p "$INSTALL_DIR"
cd "$INSTALL_DIR"

# 下载最新 linux-x64 发行包
echo "下载 ASF (linux-x64)..."
ASFXML="ASF-linux-x64.zip"
DL_URL="https://github.com/JustArchiNET/ArchiSteamFarm/releases/latest/download/${ASFXML}"
if ! wget -qO "$ASFXML" "$DL_URL"; then
  echo "下载失败：$DL_URL"
  exit 1
fi

# 解压并准备
unzip -o "$ASFXML" >/dev/null
rm -f "$ASFXML"
# 保证可执行
if [ -f "./ArchiSteamFarm" ]; then
  chmod +x ./ArchiSteamFarm
elif [ -f "./ArchiSteamFarm.dll" ]; then
  # generic 版需要 dotnet，但我们建议使用 linux-x64（上面已下载）
  echo "警告：当前为 generic 版，需要安装 dotnet 来运行。"
fi

# 创建基本 config（不写账号密码，保证首次登录交互）
mkdir -p config
cat > config/config.json <<'EOF'
{
  "CurrentCulture": "zh-CN",
  "IPC": true,
  "SteamOwnerID": 0
}
EOF

cat > config/Default.json <<'EOF'
{
  "Enabled": true,
  "Name": "Default",
  "SteamLogin": "",
  "SteamPassword": "",
  "CustomGamePlayedWhileFarming": "挂机中..."
}
EOF

# 启动 ASF 到一个 screen 会话，日志保存到 $LOG_FILE
echo "在后台启动 ASF 到 screen 会话（名称：$SCREEN_NAME），日志：$LOG_FILE"
# 清日志文件
: > "$LOG_FILE"
screen -dmS "$SCREEN_NAME" bash -c "cd '$INSTALL_DIR' && exec ./ArchiSteamFarm 2>&1 | tee '$LOG_FILE'"

echo ""
echo "请用下面命令进入 screen（在 screen 里你会看到 ASF 的控制台）："
echo "  screen -r $SCREEN_NAME"
echo ""
echo "登录说明："
echo "  - 使用 Steam 手机端：Steam App -> 菜单 -> Steam Guard -> Scan QR 来扫码登录。"
echo "  - 或在控制台选择以验证码/密码方式登录（按 ASF 控制台提示操作）。"
echo ""
echo "完成扫码/输入并确认 ASF 成功登录账号后，回到此终端并按回车继续，让脚本为你启用自启动服务。"
read -r -p "按回车继续（如果尚未完成登录请先执行 screen -r $SCREEN_NAME 并完成登录）..."

# 简单的成功检测（读取日志）
echo "检查日志是否包含登录成功的典型字样..."
if grep -Ei "OnLoggedOn|sign in is successful|OnConnect is connected to steam|There'?s nothing to farm|StartFarming" "$LOG_FILE" >/dev/null 2>&1; then
  echo "检测到登录成功日志 — 准备创建 systemd 服务并启用自启动。"
  # 创建 systemd unit
  if [ -d /run/systemd ]; then
    cat > /etc/systemd/system/asf.service <<EOF
[Unit]
Description=ArchiSteamFarm
After=network.target

[Service]
Type=simple
WorkingDirectory=$INSTALL_DIR
ExecStart=$INSTALL_DIR/ArchiSteamFarm
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
User=root

[Install]
WantedBy=multi-user.target
EOF

    systemctl daemon-reload
    systemctl enable --now asf
    echo "systemd 服务已启用并启动：systemctl status asf"
    # 关闭临时 screen（会终止临时运行的进程，systemd 会重新启动）
    screen -S "$SCREEN_NAME" -X quit || true
    echo "临时 screen 会话已关闭。ASF 现在由 systemd 管理。"
    echo "查看实时日志：journalctl -fu asf"
  else
    echo "系统未检测到 systemd，改为创建 @reboot 的 screen 启动（crontab）。"
    CRON_CMD="@reboot sleep 30 && screen -dmS $SCREEN_NAME bash -c 'cd $INSTALL_DIR && exec ./ArchiSteamFarm >> $LOG_FILE 2>&1'"
    (crontab -l 2>/dev/null | grep -Fv "$INSTALL_DIR/ArchiSteamFarm" ; echo "$CRON_CMD") | crontab -
    echo "已加入当前用户 crontab。建议重启验证。"
  fi
else
  echo "未在日志中检测到明确的登录成功字样。"
  echo "如果你已经在 screen 内完成扫码或输入验证码，请再次检查："
  echo "  screen -r $SCREEN_NAME"
  echo "并查看日志： tail -n 200 $LOG_FILE"
  echo ""
  echo "脚本已生成 config 文件，但尚未启用 systemd 自启（避免在未登录时自动启动造成登录阻塞）。"
  echo "登录成功后手动启用 systemd："
  echo "  # systemctl enable --now asf"
fi

echo ""
echo "常用操作："
echo "  查看日志 (systemd): journalctl -fu asf"
echo "  进入临时 screen: screen -r $SCREEN_NAME"
echo "  如果需要立刻查看日志文件: tail -n 200 $LOG_FILE"
echo ""
echo "完成。"
