#!/usr/bin/env bash




set -e # 以降、どのコマンドかが失敗(終了ステータスが0以外)したら即終了


#exec 2>> "$THDir/llog"
#set -x #全コマンド実行結果をファイルに出力
# エラー停止時に「行番号」と「実行に失敗したコマンド」を親に伝える設定
trap 'echo -e "ERROR: $0 \nLine:$LINENO \ncommand: $BASH_COMMAND)" >$THDir/LastErr' ERR











# 7分以上（420秒以上）動いている「hosyu_post.sh」を検出して、関連ごと一掃
ps -eo pid,etimes,args | grep "hosyu_post.sh" | grep -v grep | while read -r pid etimes args; do
    if [ "$etimes" -ge 420 ]; then
        echo "WARN: 5分以上経過した hosyu_post.sh (PID: $pid, 経過: ${etimes}秒) を発見。一掃します。"
        
        # ゾンビのプロセスグループID(PGID)を取得して、配下のpython/playwrightごと一撃で仕留める
        Z_PGID=$(ps -o pgid= -p "$pid" | tr -d ' ')
        if [ -n "$Z_PGID" ]; then
            kill -9 -"$Z_PGID" 2>/dev/null || :
        fi
        kill -9 "$pid" 2>/dev/null || :
    fi
done || :

# 【ダメ押し】古いプロセスが消えて浮いたままになった Playwright/Chromium の残党を掃除
pkill -f "remote-debugging-port=" 2>/dev/null || :
pkill -f "playwright" 2>/dev/null || :

# お掃除の余韻を少し待つ
sleep 0.5

# 大掃除した後に、まだ5分未満の正常な post が走っとるか最終チェック
if ps -ef | grep -v grep | grep "hosyu_post.sh" > /dev/null; then
    echo "Err: hosyu_post.sh 動作中につき停止（5分未満の正常なプロセスが既に存在します）"
    exit 0
fi




mkdir -p "$THDir" #ツールのディレクトリがなかったら作る
: > "$THDir/Log" # 変数リストファイルを空にする（なければ作られる）
: > "$THDir/CurrentThreadNum.dat"

echo "ほしゅサーチ日時:$(date +"%Y-%m-%d %H:%M:%S.%1N")" >> "$THDir/Log"
#rm -f "$THDir/CurrentThreadNum" #スレ番号削除
curl -s -f "https://kikikanri-tasker.apt-kn.com/CurrentThreadNum" -o "$THDir/CurrentThreadNum" || true #エラー続行#スレ番号DL


if grep -qE '^[0-9]{10,10}$' "$THDir/CurrentThreadNum"; then
    export CurrentThreadNum=$(cat "$THDir/CurrentThreadNum")
    echo スレ番号:$CurrentThreadNum >> "$THDir/Log"
    else
    echo Err:スレ番号が正しくない
    echo "e01" > "$THDir/SState"
    exit 1
fi #Dat番号の桁が正しいなら変数に入れる






#CurrentThreadNum=1776827826 #偽番でエラー起こす用


export CurrentThreadURL="https://mi.5ch.io/test/read.cgi/news4vip/$CurrentThreadNum/"
export CurrentDatURL="https://mi.5ch.io/news4vip/dat/$CurrentThreadNum.dat"
echo スレのURL:$CurrentThreadURL >> "$THDir/Log"
echo DATのURL:$CurrentDatURL >> "$THDir/Log"
curl -f "$CurrentDatURL" -o "$THDir/CurrentThreadNum.dat"|| { echo "e02" > "$THDir/SState"; exit 1; }
iconv -f SHIFT-JIS -t UTF-8//IGNORE "$THDir/CurrentThreadNum.dat" | sponge "$THDir/CurrentThreadNum.dat"









if [ -f "$THDir/LHtPNum" ]; then
    LHtPNum=$(< "$THDir/LHtPNum")
else
    LHtPNum=""
fi
if [ "$CurrentThreadNum" != "$LHtPNum" ]; then
    "$THDir/hosyu_post.sh" "HtP" || exit 1
fi










LessCnt=$(grep -c "<>20.*.*/.*.*/.*.*(.*.*)" "$THDir/CurrentThreadNum.dat")
echo レス数:$LessCnt >> "$THDir/Log"
LastLessTime=$(tail -n 1 "$THDir/CurrentThreadNum.dat" | grep -oE "20[0-9]{2}/[0-9]{2}/[0-9]{2}\(.\) [0-9]{2}:[0-9]{2}:[0-9]{2}")

TargetTime=$(echo "$LastLessTime" | sed 's/(.)//')
export LastUnix=$(date -d "$TargetTime" +%s)
NowUnix=$(date +%s)

DiffSec=$(( NowUnix - LastUnix ))
echo 最終レス経過秒:$DiffSec >> "$THDir/Log"

#3240=54min
if [ "$DiffSec" -ge 3120 ]; then
"$THDir/hosyu_post.sh"|| exit 1
fi













