#!/bin/bash
source $HOME/.gamerc

# --- Google Chat 設定 ---
#GOOGLE_CHAT_WEBHOOK_URL="https://chat.googleapis.com/v1/spaces/AAAA7hXAOCM/messages?key=AIzaSyDdI0hCZtE6vySjMm-WEfRq3CPzqKqqsHI&token=YupvEeDhNq2aF9ldCAf8TeJw8kmafVAXpj3xJWIzRGw%3D"

send_google_chat() {
    local message="$1"
    curl -X POST -H 'Content-Type: application/json' \
        "$GOOGLE_CHAT_WEBHOOK_URL" \
        -d "{\"text\": \"$message\"}" > /dev/null 2>&1
}

for machine in $(print_hosts GAMEDB); do
    SET_ID=$(echo ${machine}|sed 's/GAMEDB//')
    GAMEDB_NAME="${GAME_DB_NAME}${SET_ID}"
    echo "Machine: ${machine}, GameDB: ${GAMEDB_NAME}" | colorize orange blue

    # 1. 取得目標 World IDs
    CURRENT_PUBLIC_WORLD_IDS=$(ssh -o StrictHostKeyChecking=no ACCOUNTDB "psql -U postgres -d ${ACCOUNT_DB_NAME} -qAt -c \"SELECT id FROM worlds WHERE maxnum_user > 0 ORDER BY id;\"")
    CURRENT_PUBLIC_WORLD_IDS_STR=$(echo ${CURRENT_PUBLIC_WORLD_IDS} | tr ' ' ',')

    # 2. 取得當前數據
    GAMEDB_DATA=$(ssh -o StrictHostKeyChecking=no ${machine} "psql -U postgres -d ${GAMEDB_NAME} -qAt -c \"WITH t1 AS (SELECT pc.id, ps.world_id, SUM(num) FROM player_count pc LEFT JOIN player_characters ps USING (id) WHERE type = 16 AND world_id IN (${CURRENT_PUBLIC_WORLD_IDS_STR}) GROUP BY pc.id, ps.world_id) SELECT world_id, sum(sum) AS pc_type16 FROM t1 GROUP BY world_id ORDER BY world_id;\"")

    echo "$GAMEDB_DATA" | while IFS='|' read -r WORLD_ID PC_TYPE16
    do
        [[ -z "$WORLD_ID" ]] && continue

        # 撈取最近兩筆紀錄來判斷狀態切換
        # LAST_1: 最近的一筆, LAST_2: 倒數第二筆
        RECORDS=$(psql -U postgres Monitor -t -A -c "SELECT pc_type16 FROM player_count_type_16_records WHERE world_id = ${WORLD_ID} ORDER BY log_time DESC LIMIT 2;")
        LAST_1=$(echo "$RECORDS" | sed -n '1p')
        LAST_2=$(echo "$RECORDS" | sed -n '2p')

        # --- 判斷邏輯 ---
        # 取得當前時間（到分）
        NOW=$(date "+%Y-%m-%d %H:%M")
        if [[ -n "$LAST_1" ]]; then
            if [[ "$LAST_1" -eq "$PC_TYPE16" ]]; then
                # 【異常情況】：當前值等於前一筆
                # 為了避免每 5 分鐘一直報，可以判斷如果 LAST_2 也是一樣的就不再報 (可選)
                #MSG="🔴 *[數據停止異動警報]* 🔴\n━━━━━━━━━━━━━━━━\n🖥️ *環境*: \`${machine}\`\n🌐 *伺服器ID*: \`${WORLD_ID}\`\n📊 *目前數值*: \`${PC_TYPE16}\`\n⏳ *狀態*: 數據已連續 5 分鐘未更新\n━━━━━━━━━━━━━━━━"
                # 【🔴 異常訊息】
                MSG="🔴 *[數據停止異動警報]* 🔴\n"
                MSG="${MSG}━━━━━━━━━━━━━━━━\n"
                MSG="${MSG}🕒 *報警時間*: \`${NOW}\`\n"
                MSG="${MSG}🖥️ *環境*: \`${machine}\`\n"
                MSG="${MSG}🌐 *伺服器ID*: \`${WORLD_ID}\`\n"
                MSG="${MSG}📊 *目前數值*: \`${PC_TYPE16}\`\n"
                MSG="${MSG}⏳ *狀態*: 數據已連續 5 分鐘未更新\n"
                MSG="${MSG}━━━━━━━━━━━━━━━━\n"

                send_google_chat "$MSG"
                echo "發送異常通知: World ${WORLD_ID}" | colorize red

            #elif [[ -n "$LAST_2" ]] && [[ "$LAST_1" -eq "$LAST_2" ]] && [[ "$LAST_1" -ne "$PC_TYPE16" ]]; then
            else
                # 【恢復正常】：前兩筆是一樣的(處於異常)，但這一筆變動了
                #MSG="🟢 *[數據恢復變動通知]* 🟢\n━━━━━━━━━━━━━━━━\n🖥️ *環境*: \`${machine}\`\n🌐 *伺服器ID*: \`${WORLD_ID}\`\n📈 *最新數值*: \`${PC_TYPE16}\` (原值: ${LAST_1})\n✅ *狀態*: 數據監控已恢復更新\n━━━━━━━━━━━━━━━━"
                #MSG="🟢 *[數據正常通知]* 🟢\n━━━━━━━━━━━━━━━━\n🖥️ *環境*: \`${machine}\`\n🌐 *伺服器ID*: \`${WORLD_ID}\`\n📈 *最新數值*: \`${PC_TYPE16}\` (原值: ${LAST_1})\n✅ *狀態*: 數據監控正常\n━━━━━━━━━━━━━━━━"
                # 【🟢 恢復訊息】
                #MSG="🟢 *[數據正常通知]* 🟢\n"
                #MSG="${MSG}━━━━━━━━━━━━━━━━\n"
                #MSG="${MSG}🕒 *當下時間*: \`${NOW}\`\n"
                #MSG="${MSG}🖥️ *環境*: \`${machine}\`\n"
                #MSG="${MSG}🌐 *伺服器ID*: \`${WORLD_ID}\`\n"
                #MSG="${MSG}📈 *最新數值*: \`${PC_TYPE16}\` (原值: ${LAST_1})\n"
                #MSG="${MSG}✅ *狀態*: 數據監控正常\n"
                #MSG="${MSG}━━━━━━━━━━━━━━━━\n"

                #send_google_chat "$MSG"
                #echo "發送恢復通知: World ${WORLD_ID}" | colorize green
                echo "正常通知: World ${WORLD_ID}" | colorize green
            fi
        fi

        # 3. 紀錄新數值
        psql -U postgres Monitor -c "INSERT INTO player_count_type_16_records (world_id, pc_type16) VALUES (${WORLD_ID}, ${PC_TYPE16});"
    done
done
