# Author:       Li Junhao           l@x-cmd.com
# shellcheck    shell=sh            disable=SC2016,SC3043,SC2164     # xrc

# license:      GPLv3

___x_cmd log init   rmrf

xrc:mod:lib     rmrf        rule

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

    local op="$1" ; shift
    case "$op" in
        --help|-h)  ___x_cmd help -m rmrf ;    return 0 ;;

        rule)       ___x_cmd_rmrf_rule          "$@" ;;
        --|--run)   ___x_cmd_rmrf___run         "$@" ;;

        +|-)        N=rmrf M="Unsupport deprecated subcmd -> $op" log:ret:64 ;;

        *)          ___x_cmd_rmrf___run "$op"   "$@" ;;
    esac
}

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

    local dryrun=""

    local ___X_CMD_RMRF_RULE_LIST="${___X_CMD_RMRF_RULE_LIST}"

    while [ $# -gt 0 ]; do
        case "$1" in
            --help|-h)  ___x_cmd help -m rmrf --run ;  return 0 ;;
            --dryrun)   dryrun=1 ;  shift ;;
            --rule)     [ $# -ge 2 ] || N=rmrf M="--rule requires an argument" log:ret:64
                        ___x_cmd_rmrf_rule_add "$2" ; shift 2 ;;
            --)         shift ;     break ;;
            *)          break ;;
        esac
    done

    local IFS=" "
    local x_
    local i
    for i in "$@"; do
        # Using core:debug ...
        ___x_cmd realpath_ "$i"
        case "$x_" in
            /|/bin|/usr|/home|/var|/root|"$HOME")
                        rmrf:error "Try to 'rm -rf $i'" ;
                        return 1 ;;
            *//*)       rmrf:warn "Path consists of //. Variable expansion might not behave as you want: $i"
                        ;;
        esac
    done

    [ $# -gt 0 ]    ||  { rmrf:error "No path specified" ; return 1 ; }

    ___x_cmd_rmrf_rule_check "$@" || return $?

    if [ -z "$dryrun" ]; then
        ___x_cmd_cmds_rm -rf "$@"
    else
        x:info "Dryrun mode -> Files to remove -> $*"
    fi
}

