# shellcheck shell=dash


# ___X_CMD_DOCKER_CONTAINER_PREFIX

___x_cmd_docker_container(){
    [ $# -gt 0 ] || set -- --app

    local op="$1"; shift
    case "$op" in
        -h|--help)     ___x_cmd help -m docker container              ;;
        --app|"")        ___x_cmd_docker_ps --app                     ;;
        ls|exist|stop|rm|restart)
                        ___x_cmd_docker_container_"$op"           "$@" ;;

        *)             ___x_cmd___docker_origin container "$op"  "$@" ;;
    esac
}

___x_cmd_docker_container_ls(){
    ___x_cmd_docker_ps "$@"
}

___x_cmd_docker_container_exist(){
    ___x_cmd_docker_id "$@" 1>/dev/null 2>/dev/null
}

___x_cmd_docker_container_stop(){
    local CONTAINER_OPTS
    local prefix=""
    while [ $# -gt 0 ]; do
        case "$1" in
            -t|--time)
                        ___x_cmd cmdstr CONTAINER_OPTS "$1" "$2" ; arg:2:shift ;;
            --prefix)   prefix="$2" ; arg:2:shift ;;
            *)          break
        esac
    done

    if [ $# -gt 0 ]; then
        eval set -- "$CONTAINER_OPTS" -- \"\$@\"
        ___x_cmd___docker_origin container stop "$@" || return $?
    fi

    if [ -n "$prefix" ]; then
        ___x_cmd_docker_container_ls --tsv | \
            ___x_cmd_cmds awk -v prefix="$prefix" 'NR>1{ if ($2~prefix) print $2; }' | \
                ___x_cmd line args -n 10 "docker:info \"Stopping container \$*\"; ___x_cmd___docker_origin container stop $CONTAINER_OPTS \"\$@\""
    fi
}

___x_cmd_docker_container_rm(){
    local CONTAINER_OPTS
    local prefix=""
    while [ $# -gt 0 ]; do
        case "$1" in
            -f|--force|--link|-l|--volumes|-v)
                        ___x_cmd cmdstr CONTAINER_OPTS "$1" ; shift ;;
            --prefix)   prefix="$2" ; arg:2:shift ;;
            *)          break
        esac
    done

    if [ $# -gt 0 ]; then
        eval set -- "$CONTAINER_OPTS" -- \"\$@\"
        ___x_cmd___docker_origin container rm "$@" || return $?
    fi

    if [ -n "$prefix" ]; then
        ___x_cmd_docker_container_ls --tsv -a | \
            ___x_cmd_cmds awk -v prefix="$prefix" 'NR>1{ if ($2~prefix) print $2; }' | \
                ___x_cmd line args -n 10 "docker:info \"Removing container \$*\"; ___x_cmd___docker_origin container rm $CONTAINER_OPTS \"\$@\""
    fi
}

___x_cmd_docker_container_restart(){
    local CONTAINER_OPTS
    local prefix=""
    while [ $# -gt 0 ]; do
        case "$1" in
            -t|--timeout|-s|--signal)
                        ___x_cmd cmdstr CONTAINER_OPTS "$1" "$2" ; arg:2:shift ;;
            --prefix)   prefix="$2" ; arg:2:shift ;;
            *)          break
        esac
    done

    if [ $# -gt 0 ]; then
        eval set -- "$CONTAINER_OPTS" -- \"\$@\"
        ___x_cmd___docker_origin container restart "$@" || return $?
    fi

    if [ -n "$prefix" ]; then
        ___x_cmd_docker_container_ls --tsv -a | \
            ___x_cmd_cmds awk -v prefix="$prefix" 'NR>1{ if ($2~prefix) print $2; }' | \
                ___x_cmd line args -n 10 "docker:info \"Restarting container \$*\"; ___x_cmd___docker_origin container restart $CONTAINER_OPTS \"\$@\""
    fi
}
