# shellcheck shell=dash

# Provide a list of mirrors

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

    local op="$1";      shift
    case "$op" in
        -h|--help)              ___x_cmd help -m docker daemon mirror;  return  ;;
        set|unset|info)         ___x_cmd_docker_daemon_mirror_"$op" "$@" ;;
    esac
}

___x_cmd_docker_daemon_mirror_info(){
    ___x_cmd_docker_daemon_check     || return 1
    [ -f "/etc/docker/daemon.json" ] || return 0
    ___x_cmd jq '.["registry-mirrors"]' /etc/docker/daemon.json
}

___x_cmd_docker_daemon_mirror_set(){
    ___x_cmd_docker_daemon_check || return 1
    [ "$#" -gt 0 ] ||  set - --help

    local mirror=
    while [ "$#" -gt 0 ]; do
        case "$1" in
            -h|--help)  ___x_cmd help -m docker daemon mirror set "$@"; return ;;
            *)
                        # It's not good, use awk or jq to parse it
                        if [ -n "$mirror" ]; then
                            mirror="$mirror,"\"$1\"""
                        else
                            mirror="\"$1\""
                        fi
                        shift ;;
        esac
    done

    local daemon_json=""
    local daemon_file="/etc/docker/daemon.json"
    daemon_json="$(
        if [ -f "$daemon_file" ]; then
            ___x_cmd_cmds cat "$daemon_file"
        else
            printf "%s\n" "{}"
        fi | ___x_cmd jq '. + { "registry-mirrors": [ '"$mirror"' ] }'
    )"

    docker:info "using sudo update [file=$daemon_file]"
    ___x_cmd sudo tee "$daemon_file" >/dev/null <<A
$daemon_json
A

    docker:info --cmd "x docker daemon restart" "Restart the Docker and the daemon for the new configuration to be loaded."
}


___x_cmd_docker_daemon_mirror_unset(){
    case "$1" in
        -h|--help)  ___x_cmd help -m docker daemon mirror unset; return ;;
    esac

    local daemon_file="/etc/docker/daemon.json"
    ___x_cmd_docker_daemon_check || return 1
    [ -f "$daemon_file" ]        || return 0

    local mirror
    mirror="$(___x_cmd jq -r '."registry-mirrors".[]' "$daemon_file")"
    [ -n "$mirror" ] || {
        docker:warn "Mirror not set in daemon file"
        return 0
    }

    docker:info "using sudo update [file=$daemon_file]"
    ___x_cmd jq '. + { "registry-mirrors": [ ] }' "$daemon_file" \
        | ___x_cmd sudo tee "$daemon_file" >/dev/null

    docker:info --cmd "x docker daemon restart" "Restart the Docker and the daemon for the new configuration to be loaded."
}

