# shellcheck shell=dash

___x_cmd_docker_simg_download(){
    local mode=auto
    local imgtype=alpine

    local if0

    arg:init docker
    while [ $# -gt 0 ]; do
        case "$1" in
            -h|--help)              ___x_cmd help -m alpine image download "$@"; return 0 ;;

            --imagetype)            imgtype="${2}";     arg:2:shift ;;

            --if0)                  if0=1;              shift ;;

            --auto)                 mode="${1#--}";     shift ;;
            --dockerhub|--dh)       mode=dockerhub;     shift ;;
            *)                      N=docker M="Unknown arg -> $1" log:ret:64 ;;
        esac
    done

    local version="${1:-latest}"
    ___x_cmd_docker_simg_download_"$mode"
}

___x_cmd_docker_simg_download_imgname_(){
    x_=""
    case "$imgtype" in
        alpine|debian|fedora|ubuntu)
                    x_="$imgtype":"$version"          ;;
        kali)       x_=kalilinux/kali-rolling:latest  ;;
        arch)       x_=archlinux:latest  ;;
        nixos)      x_=nixos/nix  ;;
        *)          N=docker M="Unsupported image type -> $imgtype" log:ret:1
    esac || return $?
}

___x_cmd_docker_simg_download_auto(){
    local x_=""
    ___x_cmd_docker_simg_download_imgname_ || return $?

    [ -z "$if0" ] || {
        ! ___x_cmd_docker image exist "$x_"             || return 0
    }

    if [ "$mode" = dockerhub ] || ! ___x_cmd websrc is cn; then
        case "$imgtype" in
            alpine|debian|fedora|ubuntu)
                        ___x_cmd docker pull "$imgtype":"$version"          ;;
            kali)       ___x_cmd docker pull kalilinux/kali-rolling:latest  ;;
            arch)       ___x_cmd docker pull archlinux:latest  ;;
            nixos)      ___x_cmd docker pull nixos/nix  ;;
            *)          N=docker M="Unsupported image type -> $imgtype" log:ret:1
        esac || return $?
    else
        case "$imgtype" in
            alpine|debian|fedora|ubuntu)
                        ___x_cmd_docker_simg_downloadretag "public.ecr.aws/docker/library/$imgtype:$version"    "$imgtype:$version"            ;;
            kali)       ___x_cmd_docker_simg_downloadretag codeberg.org/x-cmd/kalilinux/kali-rolling:latest     kalilinux/kali-rolling:latest  ;;
            arch)       ___x_cmd_docker_simg_downloadretag "public.ecr.aws/docker/library/archlinux:$version"   "archlinux:$version"            ;;
            nixos)      ___x_cmd docker pull nixos/nix  ;;
            *)          N=docker M="Unsupported image type -> $imgtype" log:ret:1
        esac || return $?
    fi
}

___x_cmd_docker_simg_downloadretag(){
    local imgurl="$1"
    local newtag="$2"

    docker:info "Pulling image from -> $imgurl"

    ___x_cmd docker pull "$imgurl" \
        || N=alpine M="Fail to download image from -> $imgurl" log:ret:1

    ___x_cmd docker tag "$imgurl" "$newtag"
}

