#!/usr/bin/env bash
# 用法：
#   ./remove_source_wids_on_hosts_after_merge <target_world_id> <source_world_id1> [source_world_id2 ...]...
#
# 規則：
#   - 參數數量必須 >= 2（第一個參數為 target world id，不參與過濾）
#   - 從第二個參數開始為數字 pattern (source world ids)
#   - 移除所有「token 的數字結尾部分以 pattern 開頭」的欄位：
#       開頭：非數字且非空白的字元 0+ 個
#       中間：pattern（例如 1101）
#       結尾：數字 0+ 個
#     例：pattern=1101 時，會刪掉：
#         WS1101、WHS11011、WHS11012、WORLDDB1101、WWEBSPS11011 …
#   - 只要這一行有刪到東西，就把這一行裡「連續多個空白」壓成單一空白
#   - 完全沒刪到任何東西的行：原封不動（包含空白、排版）
#   - 直接修改目前目錄下的 test 檔案

input_file="$HOME/bin/hosts.new"

# 參數檢查：至少要有 2 個參數
if [ "$#" -lt 2 ]; then
    echo "Usage: $0 <target_world_id> <source_world_id1> [source_world_id2 ...]" >&2
    exit 1
fi

# 丟掉第一個參數（target world id）
shift 1
patterns=("$@")

# 將 pattern 用逗號串起來，丟給 perl 的環境變數
pats=$(printf '%s,' "${patterns[@]}")
pats=${pats%,}  # 去掉最後一個逗號

PATS="$pats" perl -pi -e '
    BEGIN {
        # 從環境變數取得所有 pattern
        my @patterns = split /,/, $ENV{PATS};
        # quotemeta 確保 pattern 安全進 regex
        my $inner = join "|", map { quotemeta($_) } @patterns;

        # 建出一個大 regex：
        #   (?<=\s|^)              前面是空白或行首
        #   [^\d\s]*               0+ 個「非數字、非空白」字元（例如 WS、WHS、WORLDDB）
        #   (?:$inner)             任一 pattern（例如 1101|2101|...）
        #   [0-9]*                 後面 0+ 個數字
        #   (?=\s|$)               後面是空白或行尾
        our $pat = qr{(?<=\s|^)(?:[^\d\s]*(?:$inner)[0-9]*)(?=\s|$)};
    }

    # 先刪掉符合 token，$changed 是本行刪掉的次數
    my $changed = s/$pat//g;

    # 只有在這一行有刪到東西時，才壓縮多重空白
    if ($changed) {
        chomp;              # 先移除換行，處理完再加回
        s/ +/ /g;           # 把 1+ 空白變成 1 個空白
        s/^[ \t]+//;        # 去除行首空白（不含換行）
        s/[ \t]+$//;        # 去除行尾空白（不含換行）

        # 如果整行只剩 IP（沒有 hostname），移除該行並記錄
        if (/^\d+\.\d+\.\d+\.\d+$/) {
            my $ip = $_;
            print STDERR "[WARNING] 移除只剩 IP 的行: $ip\n";
            if (open(my $fh, ">>", "/tmp/hosts_ip_remove_monitor.log")) {
                print $fh "$ip\n";
                close($fh);
            }
            $_ = "";        # 整行移除（含換行）
        } else {
            $_ .= "\n";    # 加回換行
        }
    }
' "$input_file"

echo "File modified in-place: $input_file" >&2
