#!/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) {
        s/ +/ /g;   # 把 1+ 空白變成 1 個空白
    }
' "$input_file"

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