# shellcheck shell=dash

___x_cmd log init rm

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

    local op="$1";      shift
    case "$op" in
        -h|--help)      ___x_cmd help -m rm "$@";    return 0 ;;
        *)              ___x_cmd_rm___exec "$op"    "$@" ;;
    esac
}

___x_cmd_rm___exec(){
    local pipemode=""
    local empty=""
    local ___X_CMD_RM_OPTS=""
    while [ $# -gt 0 ]; do
        case "$1" in
            -|--pipe)       pipemode="$1" ;;
            -e|--empty)     empty=1 ;;
            --)             shift; break ;;
            -*)             ___x_cmd cmdstr ___X_CMD_RM_OPTS "$1" ;;
            *)              break ;;
        esac
        shift
    done

    [ -z "$empty" ] || {
        {
            [ $# -eq 0 ] || printf "%s\n" "$@"
            [ -z "$pipemode" ] || ___x_cmd_cmds cat
        } | {
            while read -r f; do
                [ -f "$f" ]     || {
                    rm:warn "File not found -> $f"
                    continue
                }
                [ ! -s "$f" ]   || continue
                eval ___x_cmd_cmds rm "$___X_CMD_RM_OPTS -- \"$f\"" || return $?
            done
        }

        return
    }

    if [ $# -gt 0 ]; then
        eval ___x_cmd_cmds rm "$___X_CMD_RM_OPTS -- \"\$@\"" || return $?
    fi

    if [ -n "$pipemode" ]; then
        eval set -- "$___X_CMD_RM_OPTS"
        local cmd
        cmd="$(printf "%s " "$@")"
        cmd="___x_cmd_cmds rm $cmd --"
        ___x_cmd line args -n 50 eval "$cmd \"\$@\""
    fi
}
