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

# 至少要有 3 個參數：<environment> <target_world_id> <source_world_id1> [...]
[ -z "$3" ] && {
    echo "Usage: $0 <environment> <target_world_id> <source_world_id1> [source_world_id2 ...]" >&2
    exit 1
}

# 第一個參數: 環境
environment="$1"
shift

# 第二個參數：target_world_id（目前未實際使用，如需可加入邏輯）
target_world_id="$1"
shift

# 其餘參數：source_world_ids
source_world_ids="$*"

# 檢查 environment 合法性
case "$environment" in
    test|live)
        ;;
    *)
        echo "Unknown environment: ${environment} (only 'test' or 'live' allowed)" >&2
        exit 1
        ;;
esac
ENVIRONMENT=$([ "$environment" = "test" ] && echo "測試" || echo "正式")

# 建立搜尋結果 log 檔
#ts=$(date +%Y%m%d%H%M%S)
#LOG_FILE="reward_activity_search.${ts}.log"
LOG_FILE="/tmp/reward_cgi_monitor.log"
{
    echo "==============================================="
    echo "Reward activity log check start: $(date)"
    echo "Environment      : ${environment}"
    echo "Target world id  : ${target_world_id}"
    echo "Source world list: ${source_world_ids}"
    echo "Log file         : ${LOG_FILE}"
    echo "Retry policy     : max 5 times, interval 3 seconds"
    echo "==============================================="
} > "$LOG_FILE"

# 重試相關設定
MAX_RETRY=5
SLEEP_SEC=3

all_ok=1  # 只要有任何 world 有問題就設為 0

for world_id in ${source_world_ids}; do
    SET_ID=$(( world_id / 100 ))
    CGI_CMD="reward_activity+${world_id}+5"

    # 依環境與 SET_ID 設定 MACHINE
    if [ "${environment}" == "test" ]; then
        if   [ "${SET_ID}" -ge 10 ] && [ "${SET_ID}" -lt 20 ]; then
            MACHINE="MERGE_ASIA"
        elif [ "${SET_ID}" -ge 20 ] && [ "${SET_ID}" -lt 30 ]; then
            MACHINE="MERGE_US"
        elif [ "${SET_ID}" -ge 30 ] && [ "${SET_ID}" -lt 40 ]; then
            MACHINE="MERGE_EU"
        else
            echo "Unknown SET_ID ${SET_ID} for test environment" >&2
            echo "[ERROR] world_id=${world_id}, SET_ID=${SET_ID}: unknown SET_ID for test" >> "$LOG_FILE"
            all_ok=0
            continue
        fi
    elif [ "${environment}" == "live" ]; then
        MACHINE="MS${SET_ID}"
    fi

    # 由 /etc/hosts 取得 IP
    IP=$(awk -v h="${MACHINE}" '$0 ~ h {print $1}' /etc/hosts | head -n 1)
    if [ -z "$IP" ]; then
        echo "Cannot find IP for machine '${MACHINE}' in /etc/hosts" >&2
        echo "[ERROR] world_id=${world_id}, MACHINE=${MACHINE}: IP not found in /etc/hosts" >> "$LOG_FILE"
        all_ok=0
        continue
    fi

    # 由機器上 setup.ini 取得 Mission CGI Port
    PORT=$(ssh "${MACHINE}" "grep '^CGIPort=' \"\$HOME/servers${SET_ID}/MissionServer${SET_ID}/setup.ini\" 2>/dev/null | sed 's/CGIPort=//'")
    if [ -z "$PORT" ]; then
        echo "Cannot get CGIPort from ${MACHINE}:\$HOME/servers${SET_ID}/MissionServer${SET_ID}/setup.ini" >&2
        echo "[ERROR] world_id=${world_id}, MACHINE=${MACHINE}: CGIPort not found in setup.ini" >> "$LOG_FILE"
        all_ok=0
        continue
    fi

    echo "Machine: ${MACHINE} => IP: ${IP}, Mission: MS${SET_ID}, World: WS${world_id}, Port: ${PORT}"
    echo "curl http://127.0.0.1/cgi-bin/CGIAgent.fcgi?${IP},${PORT},0KjaM85BjfqjA,${CGI_CMD}"
    #curl http://127.0.0.1/cgi-bin/CGIAgent.fcgi?${IP},${PORT},0KjaM85BjfqjA,${CGI_CMD}

    {
        echo "-------------------------------------------------------"
        echo "world_id = ${world_id}"
        echo "SET_ID   = ${SET_ID}"
        echo "MACHINE  = ${MACHINE}"
        echo "IP       = ${IP}"
        echo "PORT     = ${PORT}"
        echo "CGI_CMD  = ${CGI_CMD}"
        echo "Check log pattern: ',,reward_activity 5'"
        echo "Retry: max=${MAX_RETRY}, interval=${SLEEP_SEC}s"
    } >> "$LOG_FILE"

    # 重試檢查 GM log
    found=0
    attempt=1
    while [ "$attempt" -le "$MAX_RETRY" ]; do
        echo "World ${world_id}: check log attempt ${attempt}/${MAX_RETRY}..." | tee -a "$LOG_FILE"

        if ssh "WS${world_id}" "cd \"\$HOME/servers${SET_ID}/WorldServer${world_id}\" 2>/dev/null && \
            grep -q ',,reward_activity 5' GM${world_id}.log.* 2>/dev/null"
        then
            echo "World ${world_id}: found ',,reward_activity 5' in GM${world_id}.log.* (OK at attempt ${attempt})"
            echo "[OK]    World ${world_id}: found ',,reward_activity 5' in GM${world_id}.log.* (attempt ${attempt})" >> "$LOG_FILE"
            found=1
            break
        else
            echo "World ${world_id}: NOT found ',,reward_activity 5' in GM${world_id}.log.* (attempt ${attempt})" | tee -a "$LOG_FILE"
            # 若尚未達最大重試次數，睡眠後再試
            if [ "$attempt" -lt "$MAX_RETRY" ]; then
                sleep "$SLEEP_SEC"
            fi
        fi

        attempt=$((attempt + 1))
    done

    if [ "$found" -eq 0 ]; then
        echo "World ${world_id}: FAILED after ${MAX_RETRY} attempts" | tee -a "$LOG_FILE" >&2
        all_ok=0
    fi

    echo "------------------------------------------------------------" >> "$LOG_FILE"
    echo "------------------------------------------------------------"
done

if [ "$all_ok" -eq 1 ]; then
    echo "全部 world 的 GM log 都已在 ${MAX_RETRY} 次內找到 ',,reward_activity 5'，完成"
    echo "詳細搜尋紀錄請見：${LOG_FILE}"
    send_chatbot_text_only_test "[${ENVIRONMENT}合併] CGI: reward_activity 5 成功!" "${source_world_ids}"
    exit 0
else
    echo "部分 world 的 GM log 在 ${MAX_RETRY} 次重試後仍未找到 ',,reward_activity 5'，請檢查詳細搜尋紀錄：" >&2
    echo "LOG_FILE = ${LOG_FILE}" >&2
    echo "================= 搜尋紀錄開始 =================" >&2
    cat "$LOG_FILE" >&2
    echo "================= 搜尋紀錄結束 =================" >&2
    send_messages_test ERROR reward_cgi "[${ENVIRONMENT}合併] CGI: reward_activity 5 失敗! ${source_world_ids}"
    exit 1
fi

