#!/usr/bin/env bash
set -e

echo "=== 安装 Anbernic 游戏时间控制系统 ==="

# ---------------- 配置 ----------------
LIMIT_SEC=60
NOPLAY_START=22
NOPLAY_END=6

GUARD_DIR="/usr/local/game_guard"
BIN_DIR="/usr/local/bin"
LOG_DIR="/var/log/game_time_guard"
LOG_FILE="$LOG_DIR/time_usage.log"

RETROARCH_BIN="/usr/bin/retroarch"

# ---------------- 准备目录 ----------------
echo "[1/7] 创建目录..."
mkdir -p "$GUARD_DIR" "$LOG_DIR"

# ---------------- 写 game_allowed.sh ----------------
echo "[2/7] 写入启动拦截逻辑..."
cat > "$GUARD_DIR/game_allowed.sh" <<EOF
#!/usr/bin/env bash

LOGFILE="$LOG_FILE"
LIMIT=$LIMIT_SEC
NOPLAY_START=$NOPLAY_START
NOPLAY_END=$NOPLAY_END

[ ! -f "\$LOGFILE" ] && exit 0

read used date0 < "\$LOGFILE"
today=\$(date +%F)

[ "\$date0" != "\$today" ] && exit 0

hour=\$(date +%H)
if [ "\$hour" -ge "\$NOPLAY_START" ] || [ "\$hour" -lt "\$NOPLAY_END" ]; then
    exit 1
fi

[ "\$used" -ge "\$LIMIT" ] && exit 1

exit 0
EOF

chmod +x "$GUARD_DIR/game_allowed.sh"

# ---------------- 写 game_time_guard.sh ----------------
echo "[3/7] 写入时间统计守护脚本..."
cat > "$BIN_DIR/game_time_guard.sh" <<EOF
#!/usr/bin/env bash

LOGFILE="$LOG_FILE"
LIMIT=$LIMIT_SEC
DELTA=60
NOPLAY_START=$NOPLAY_START
NOPLAY_END=$NOPLAY_END

mkdir -p "$LOG_DIR"
[ ! -f "\$LOGFILE" ] && echo "0 \$(date +%F)" > "\$LOGFILE"

read used date0 < "\$LOGFILE"
today=\$(date +%F)

if [ "\$today" != "\$date0" ]; then
    used=0
fi

hour=\$(date +%H)
if [ "\$hour" -ge "\$NOPLAY_START" ] || [ "\$hour" -lt "\$NOPLAY_END" ]; then
    pkill -9 retroarch 2>/dev/null || true
    pkill -9 -f "_emu.dge" 2>/dev/null || true
    echo "\$used \$today" > "\$LOGFILE"
    exit 0
fi

if pgrep -x retroarch >/dev/null || pgrep -f "_emu.dge" >/dev/null; then
    used=\$((used + DELTA))
    if [ "\$used" -ge "\$LIMIT" ]; then
        used=\$LIMIT
        pkill -9 retroarch 2>/dev/null || true
        pkill -9 -f "_emu.dge" 2>/dev/null || true
    fi
fi

echo "\$used \$today" > "\$LOGFILE"
EOF

chmod +x "$BIN_DIR/game_time_guard.sh"

# ---------------- 包装 retroarch ----------------
echo "[4/7] 包装 retroarch..."
if [ -f "$RETROARCH_BIN" ] && [ ! -f "$RETROARCH_BIN.real" ]; then
    mv "$RETROARCH_BIN" "$RETROARCH_BIN.real"
fi

cat > "$RETROARCH_BIN" <<EOF
#!/usr/bin/env bash
$GUARD_DIR/game_allowed.sh || exit 0
exec $RETROARCH_BIN.real "\$@"
EOF

chmod +x "$RETROARCH_BIN"

# ---------------- 包装 *_emu.dge ----------------
echo "[5/7] 包装 *_emu.dge..."
for f in /usr/bin/*_emu.dge; do
    [ -e "\$f" ] || continue
    if [ ! -f "\$f.real" ]; then
        mv "\$f" "\$f.real"
        cat > "\$f" <<EOF
#!/usr/bin/env bash
$GUARD_DIR/game_allowed.sh || exit 0
exec \$0.real "\$@"
EOF
        chmod +x "\$f"
    fi
done

# ---------------- 安装 cron ----------------
echo "[6/7] 设置 cron 每分钟统计..."
(crontab -l 2>/dev/null | grep -v game_time_guard.sh; \
 echo "* * * * * $BIN_DIR/game_time_guard.sh") | crontab -

# ---------------- 权限 ----------------
echo "[7/7] 设置权限..."
touch "$LOG_FILE"
chown -R root:root "$GUARD_DIR" "$LOG_DIR" "$BIN_DIR/game_time_guard.sh"
chmod 755 "$GUARD_DIR" "$LOG_DIR"
chmod 644 "$LOG_FILE"

echo "======================================"
echo "✔ 安装完成"
echo "✔ 每日可玩 2 小时"
echo "✔ 22:00–06:00 禁玩"
echo "✔ 时间到后禁止再次启动"
echo "======================================"
