#!/usr/bin/env bash

# action 通用 Bash 层约定：
#   1. 普通 action 只处理传入对象自身。
#   2. with_rely_<action> 是通用带依赖 action 命名协议。
#   3. 本文件只处理 action 名称和列表变换，不读取 registry，也不执行业务逻辑。
#   4. 业务脚本负责实现对象解析和 action 实际执行。

ACTION_WITH_RELY_PREFIX="with_rely_"

# API: action_is_with_rely(<operation>)
# 作用: 判断 action 是否带 with_rely_ 前缀。
# 参数: operation 是 action 名。
# 返回: 是则返回 0，否则返回 1。
action_is_with_rely() {
    local op="$1"
    [[ "$op" == ${ACTION_WITH_RELY_PREFIX}* ]]
}

# API: action_strip_with_rely(<operation>)
# 作用: 去掉 with_rely_ 前缀，得到基础 action 名。
# 参数: operation 是 action 名。
# 返回: stdout 输出基础 action 名。
action_strip_with_rely() {
    local op="$1"
    if action_is_with_rely "$op"; then
        printf '%s' "${op#${ACTION_WITH_RELY_PREFIX}}"
    else
        printf '%s' "$op"
    fi
}

# API: action_list_with_rely_ops_from()
# 作用: 从 stdin 读取基础 action 列表，为每个 action 输出 with_rely_ 版本。
# 参数: stdin 每行一个 action。
# 返回: stdout 每行一个 with_rely_ action。
# 注意: 空行会跳过。
action_list_with_rely_ops_from() {
    local op
    while IFS= read -r op || [[ -n "$op" ]]; do
        [[ -n "$op" ]] && printf '%s%s\n' "$ACTION_WITH_RELY_PREFIX" "$op"
    done
}

# API: action_list_self_and_with_rely_ops_from()
# 作用: 从 stdin 读取基础 action 列表，同时输出原 action 和 with_rely_ action。
# 参数: stdin 每行一个 action。
# 返回: stdout 先输出原 action，再输出 with_rely_ action。
# 注意: 业务脚本可用它快速暴露两组操作。
action_list_self_and_with_rely_ops_from() {
    local ops=()
    local op
    while IFS= read -r op || [[ -n "$op" ]]; do
        if [[ -n "$op" ]]; then
            ops+=("$op")
            printf '%s\n' "$op"
        fi
    done
    for op in "${ops[@]}"; do
        printf '%s%s\n' "$ACTION_WITH_RELY_PREFIX" "$op"
    done
}
