#!/bin/sh

BASE="/mnt/onboard/.adds/kobo-sideload-sync"
BIN="$BASE/bin/kobo-receiver"
RUN_DIR="$BASE/run"
PID_FILE="$RUN_DIR/receiver.pid"
STATUS_FILE="$RUN_DIR/status.txt"
LEASE_FILE="$RUN_DIR/forcewifi-lease.json"
LEASE_SCRIPT="$BASE/session-lease.sh"
COMPACT="${1:-}"

show_pending_lease() {
    if [ -e "$LEASE_FILE" ]; then
        if [ "$COMPACT" = "--compact" ]; then
            echo "请点击“结束无线传输”完成收尾并恢复 Wi-Fi 设置。"
        else
            /bin/sh "$LEASE_SCRIPT" show
        fi
    fi
}

if [ ! -s "$PID_FILE" ]; then
    if [ -e "$LEASE_FILE" ]; then
        echo "文件接收没有运行，但本次会话尚未完整结束。"
        show_pending_lease
    else
        echo "无线传书没有运行。"
    fi
    exit 0
fi

pid="$(sed -n '1p' "$PID_FILE")"
case "$pid" in
    ''|*[!0-9]*)
        echo "无线传书状态文件无效。"
        exit 1
        ;;
esac

actual="$(readlink "/proc/$pid/exe" 2>/dev/null)"
if ! kill -0 "$pid" 2>/dev/null || { [ "$actual" != "$BIN" ] && [ "$actual" != "$BIN (deleted)" ]; }; then
    if [ -e "$LEASE_FILE" ]; then
        echo "文件接收已经停止，但本次会话尚未完整结束。"
        show_pending_lease
    else
        echo "无线传书已经停止。"
    fi
    exit 0
fi

if [ ! -s "$STATUS_FILE" ]; then
    echo "Receiver 正在启动，请稍后再看。"
    exit 0
fi

state="$(sed -n 's/^STATE=//p' "$STATUS_FILE")"
if [ "$COMPACT" = "--compact" ]; then
    short_id="$(sed -n 's/^DEVICE_ID=//p' "$STATUS_FILE" | sed 's/.*\(....\)$/\1/')"
    [ -z "$short_id" ] || printf '设备标识：%s\n' "$short_id"
fi
if [ "$state" = "closing" ]; then
    echo "正在结束无线传输，已停止接受新批次；请等待安全收尾。"
    exit 0
fi
echo "无线传输正在运行。"
published="$(sed -n 's/^PUBLISHED_COUNT=//p' "$STATUS_FILE")"
pending="$(sed -n 's/^PENDING_COUNT=//p' "$STATUS_FILE")"
case "$published" in ''|*[!0-9]*) ;; *) echo "本次已保存 $published 个文件。" ;; esac
case "$pending" in ''|*[!0-9]*|0) ;; *) echo "还有 $pending 个文件等待本批完成，请勿结束传输。" ;; esac
if grep -q '^KEEP_RECEIVING=true$' "$STATUS_FILE"; then
    echo "接收器保持开启，可继续发送下一批。"
fi
active="$(sed -n 's/^ACTIVE_OPERATION=//p' "$STATUS_FILE")"
expires="$(sed -n 's/^EXPIRES_AT_UNIX=//p' "$STATUS_FILE")"
now="$(date +%s)"
if [ "$active" = "true" ]; then
    echo "正在接收或发布文件；传输期间不会因空闲倒计时关闭。"
else
case "$expires:$now" in
    *[!0-9:]*|:*)
        echo "自动关闭倒计时暂时不可用。"
        ;;
    *)
        remaining=$((expires - now))
        if [ "$remaining" -le 0 ]; then
            echo "空闲期限已到，正在安全关闭。"
        else
            minutes=$(((remaining + 59) / 60))
            echo "若没有新操作，预计约 $minutes 分钟后自动关闭。"
        fi
        ;;
esac
fi
cached_url="$(sed -n 's/^LOCAL_PAGE_URL=//p' "$STATUS_FILE")"
cached_host="$(printf '%s\n' "$cached_url" | sed -n 's#^http://\([^:/]*\):[0-9][0-9]*/.*#\1#p')"
current_addresses="$($BIN --detect-lan-ip 2>/dev/null)"
address_matches=false
for address in $current_addresses; do
    if [ "$address" = "$cached_host" ]; then
        address_matches=true
        break
    fi
done

if [ "$address_matches" = "true" ]; then
    if [ "$COMPACT" != "--compact" ]; then
        printf '手机或电脑打开：%s\n' "$cached_url"
    fi
elif [ -n "$current_addresses" ]; then
    echo "Receiver 进程仍在，但 Kobo 的局域网地址已经变化。"
    echo "请先点击“完成传书并导入”结束本次会话，再重新开启生成新二维码。"
else
    echo "Receiver 进程仍在，但 Kobo 当前没有可用的局域网地址。"
    echo "请先让 Wi-Fi 重新连接；若仍失败，请完成本次会话后再重新开启。"
fi

if [ "$COMPACT" != "--compact" ]; then
    sed -n 's/^UPLOAD_DIR=/本次暂存目录：/p; s/^LIBRARY_DIR=/书库目录：/p' "$STATUS_FILE"
fi
if [ -e "$LEASE_FILE" ]; then
    echo "文件接收结束后，请点击“完成传书并导入”恢复本次 Wi-Fi 保活。"
else
    echo "警告：Receiver 正在运行，但找不到 Wi-Fi 恢复记录。请停止使用并通过 USB 检查。"
fi
