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

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

# 第一個參數: CGI_Command
cgi_command="$1"

if [[ ${cgi_command} =~ ^[0-9]+\+[0-9]+\+[0-9]+$ ]]; then
    echo "${cgi_command}'s Pattern is correct!"
else
    exec echo "${cgi_command}'s Pattern is wrong."
fi

cgi_command_convert=$(echo ${cgi_command} | sed 's/+/ /g')
cgi_log_text=",,open_activity ${cgi_command_convert}"
shift

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

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

# 檢查 environment 合法性
case "$environment" in
    live|LIVE)
        ENVIRONMENT="正式機"
        SCRIPT1="send_chatbot_text_only"
        SCRIPT2="send_messages"
        ;;
    merge|MERGE)
        ENVIRONMENT="合併機"
        SCRIPT1="send_chatbot_text_only_test"
        SCRIPT2="send_messages_test"
        ;;
    test|TEST)
        ENVIRONMENT="測試機"
        SCRIPT1="send_chatbot_text_only_test"
        SCRIPT2="send_messages_test"
        ;;
    data|DATA)
        ENVIRONMENT="資料機"
        SCRIPT1="send_chatbot_text_only_test"
        SCRIPT2="send_messages_test"
        ;;
    time1|TIME1)
        ENVIRONMENT="TIME1"
        SCRIPT1="send_chatbot_text_only_test"
        SCRIPT2="send_messages_test"
        ;;
    submit|SUBMIT)
        ENVIRONMENT="送審機"
        SCRIPT1="send_chatbot_text_only_test"
        SCRIPT2="send_messages_test"
        ;;
    *)
        echo "Unknown environment: ${environment} (only 'test' or 'live' or 'merge' or 'data' or 'time1' or 'submit' allowed)" >&2
        exit 1
        ;;
esac


# 建立搜尋結果 log 檔
LOG_FILE="/tmp/open_activity_monitor.log"
{
    echo "==============================================="
    echo "Open Activity log check start: $(date)"
    echo "Environment      : ${environment}"
    echo "World ID lists: ${world_id_lists}"
    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 ${world_id_lists}; do
    SET_ID=$(( world_id / 100 ))
    CGI_CMD="open_activity+${world_id}+${cgi_command}"

    # 依環境與 SET_ID 設定 MS_MACHINE & WS_MACHINE
    if [[ ${environment,,} == "merge" ]]; then
        if   [ "${SET_ID}" -ge 10 ] && [ "${SET_ID}" -lt 20 ]; then
            MS_MACHINE="MERGE_ASIA"
            WS_MACHINE="MERGE_ASIA"
        elif [ "${SET_ID}" -ge 20 ] && [ "${SET_ID}" -lt 30 ]; then
            MS_MACHINE="MERGE_US"
            WS_MACHINE="MERGE_US"
        elif [ "${SET_ID}" -ge 30 ] && [ "${SET_ID}" -lt 40 ]; then
            MS_MACHINE="MERGE_EU"
            WS_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,,} == "test" ]]; then
        MS_MACHINE="TEST"
        WS_MACHINE="TEST"
    elif [[ ${environment,,} == "data" ]]; then
        MS_MACHINE="DATA"
        WS_MACHINE="DATA"
    elif [[ ${environment,,} == "time1" ]]; then
        MS_MACHINE="TIME1"
        WS_MACHINE="TIME1"
    elif [[ ${environment,,} == "submit" ]]; then
        MS_MACHINE="SUBMIT"
        WS_MACHINE="SUBMIT"
    elif [[ ${environment,,} == "live" ]]; then
        MS_MACHINE="MS${SET_ID}"
        WS_MACHINE="WS${world_id}"
    fi

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

    # 由機器上 setup.ini 取得 Mission CGI Port
    PORT=$(ssh "${MS_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 ${MS_MACHINE}:\$HOME/servers${SET_ID}/MissionServer${SET_ID}/setup.ini" >&2
        echo "[ERROR] world_id=${world_id}, MS_MACHINE=${MS_MACHINE}: CGIPort not found in setup.ini" >> "$LOG_FILE"
        all_ok=0
        continue
    fi

    echo "Machine: ${MS_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}
done
