
# preset: manage predefined rulesets

___x_cmd_rule_preset(){
    [ $# -gt 0 ]    ||  set -- --help

    local op="$1";  shift
    case "$op" in
        -h|--help)  ___x_cmd help -m rule preset "$@" ; return 0 ;;
        ls|which)   ___x_cmd_rule_preset_"$op" "$@" ;;
        *)          ___x_cmd_rule_preset_ls "$op" "$@" ;;
    esac
}

___x_cmd_rule_preset_resolve_(){
    local name="${1#:}"
    [ -n "$name" ] || { x_=""; return 1; }

    # Try file first: preset/ror.rule.yml, preset/okr.rule.yml
    x_="$___X_CMD_ROOT_SKILL0/rule/preset/${name}.rule.yml"
    [ -f "$x_" ] && return 0

    # Try directory: preset/os/, preset/ssh/
    x_="$___X_CMD_ROOT_SKILL0/rule/preset/$name"
    [ -d "$x_" ] && return 0

    x_=""; return 1
}

___x_cmd_rule_preset_ls(){
    local dir="$___X_CMD_ROOT_SKILL0/rule/preset"
    [ -d "$dir" ] || N=rule M="No preset directory found" log:ret:64

    local d=""
    for d in "$dir"/*/; do
        [ -d "$d" ] || continue
        d="${d%/}"
        d="${d##*/}"
        printf ":%s\n" "$d"
    done
    for d in "$dir"/*.rule.yml; do
        [ -f "$d" ] || continue
        d="${d%.rule.yml}"
        d="${d##*/}"
        printf ":%s\n" "$d"
    done
}

___x_cmd_rule_preset_which(){
    [ -n "$1" ] || { N=rule M="Need a preset name (e.g. :os)" log:ret:64; }
    local x_=""
    ___x_cmd_rule_preset_resolve_ "$1" || N=rule M="Preset '$1' not found" log:ret:64
    printf "%s\n" "$x_"
}
