import docker

try:
    client = docker.from_env()
except:
    print('Oops! Looks like Docker is not setup for rootless mode. Please run dockersh with sudo')
    exit()

def containers(input):
    output = {}
    cnts = client.containers.list()
    for i in cnts:
        output[i.name] = None
    output.update(input)
    return output

def containers_all(input):
    output = {}
    cnts = client.containers.list(all=True)
    for i in cnts:
        output[i.name] = None
    output.update(input)
    return output

def images(input):
    output = {}
    imgs = client.images.list()
    for i in imgs:
        if not i.tags:
            output[i.short_id[7:]] = None
        else:
            output[i.tags[0]] = None
    output.update(input)
    return output

def networks(input, cnts=True):
    output = {}
    ntwrks = client.networks.list()
    if cnts:
        for i in ntwrks:
            output[i.name] = containers_all({})
    else:
        for i in ntwrks:
            output[i.name] = None
    output.update(input)
    return output

def volumes(input):
    output = {}
    vols = client.volumes.list()
    for i in vols:
        output[i.name] = None
    output.update(input)
    return output

def completer_commands():

    commands = {
        'app' : {
            'build': {'-f' : None,
                        '-q' : None,
                        '-t' : None,
                        '--build-arg=' : None,
                        '--file=' : None,
                        '--iidfile=' : None,
                        '--no-cache' : None,
                        '--no-resolve-image' : None,
                        '--progress=' : None,
                        '--pull' : None,
                        '--quiet' : None,
                        '--tag=' : None,},
            'init': {'--compose-file=' : None},
            'inspect': {'--credential=' : None,
                        '--credential-set=' : None,
                        '--pretty' : None,
                        '--with-registry-auth' : None,},
            'ls': {'-f' : None,
                    '--format=' : None,},
            'pull': None,
            'push': None,
            'rm': {'-f' : None,
                    '--credential=' : None,
                    '--credential-set=' : None,
                    '--force' : None,
                    '--with-registry-auth' : None,},
            'run': {'-s' : None,
                    '--credential=' : None,
                    '--credential-set=' : None,
                    '--label=' : None,
                    '--name=' : None,
                    '--namespace=' : None,
                    '--orchestrator=' : None,
                    '--parameters-file=' : None,
                    '--set=' : None,
                    '--with-registry-auth' : None,},
            'update': {'-s' : None,
                        '--credential=' : None,
                        '--credential-set=' : None,
                        '--image=' : None,
                        '--parameters-file=' : None,
                        '--set=' : None,
                        '--with-registry-auth' : None,},
        },

        'builder' : {
            'build' : {'-c' : None,
                        '-f' : None,
                        '-m' : None,
                        '-q' : None,
                        '-t' : None,
                        '--add-host=' : None,
                        '--build-arg=' : None,
                        '--cache-from=' : None,
                        '--cgroup-parent=' : None,
                        '--compress' : None,
                        '--cpu-period=' : None,
                        '--cpu-quota=' : None,
                        '--cpu-shares=' : None,
                        '--cpuset-cpus=' : None,
                        '--cpuset-mems=' : None,
                        '--disable-content-trust' : None,
                        '--file=' : None,
                        '--force-rm' : None,
                        '--iidfile=' : None,
                        '--isolation=' : None,
                        '--label=' : None,
                        '--memory=' : None,
                        '--memory-swap=' : None,
                        '--network=' : None,
                        '--no-cache' : None,
                        '--pull' : None,
                        '--quiet' : None,
                        '--rm' : None,
                        '--security-opt=' : None,
                        '--shm-size=' : None,
                        '--squash' : None,
                        '--tag=' : None,
                        '--target=' : None,
                        '--ulimit=' : None,},
            'prune' : {'-a' : None,
                        '-f' : None,
                        '--all' : None,
                        '--filter=' : None,
                        '--force' : None,
                        '--keep-storage=' : None,},
        },

        'buildx' : {
            'bake' : {'-f' : None,
                        '--builder=' : None,
                        '--file=' : None,
                        '--load' : None,
                        '--no-cache' : None,
                        '--print' : None,
                        '--progress=' : None,
                        '--pull' : None,
                        '--push' : None,},
            'build' : {'-f' : None,
                        '-o' : None,
                        '-q' : None,
                        '-t' : None,
                        '--add-host=' : None,
                        '--allow=' : None,
                        '--build-arg=' : None,
                        '--build-context=' : None,
                        '--builder=' : None,
                        '--cache-from=' : None,
                        '--cache-to=' : None,
                        '--cgroup-parent=' : None,
                        '--file=' : None,
                        '--iidfile=' : None,
                        '--label=' : None,
                        '--load' : None,
                        '--network=' : None,
                        '--no-cache' : None,
                        '--no-cache-filter=' : None,
                        '--output=' : None,
                        '--platform=' : None,
                        '--progress=' : None,
                        '--pull' : None,
                        '--push' : None,
                        '--quiet' : None,
                        '--secret=' : None,
                        '--shm-size=' : None,
                        '--ssh=' : None,
                        '--tag=' : None,
                        '--target=' : None,
                        '--ulimit=' : None,},
            'create' : {'--append' : None,
                        '--bootstrap' : None,
                        '--buildkitd-flags=' : None,
                        '--config=' : None,
                        '--driver=' : None,
                        '--driver-opt=' : None,
                        '--leave' : None,
                        '--name=' : None,
                        '--node=' : None,
                        '--platform=' : None,
                        '--use' : None,},
            'du' : {'--builder=' : None,
                    '--filter=' : None,
                    '--verbose' : None,},
            'inspect' : {'--bootstrap' : None,
                        '--builder=' : None,},
            'ls' : None,
            'prune' : {'-a' : None,
                        '-f' : None,
                        '--all' : None,
                        '--builder=' : None,
                        '--filter=' : None,
                        '--force' : None,
                        '--keep-storage=' : None,
                        '--verbose' : None,},
            'rm' : {'-f' : None,
                    '--all-inactive' : None,
                    '--builder=' : None,
                    '--force' : None,
                    '--keep-daemon' : None,
                    '--keep-state' : None,},
            'stop' : {'--builder=' : None},
            'use' : {'--builder=' : None,
                    '--default' : None,
                    '--global' : None,},
            'version' : None,
        },

        'config' : {
            'create' : {'-l' : None,
                        '--label=' : None,
                        '--template-driver=' : None,},
            'inspect' : {'-f' : None,
                        '--format=' : None,
                        '--pretty' : None,},
            'ls' : {'-f' : None,
                    '-q' : None,
                    '--filter=' : None,
                    '--format=' : None,
                    '--quiet' : None,},
            'rm' : None,
            },

        'container' : {
            'attach' : containers({'--detach-keys=' : None,
                        '--no-stdin' : None,
                        '--sig-proxy' : None,}),
            'commit' : containers_all({'-a' : None,
                                        '-c' : None,
                                        '-m' : None,
                                        '-p' : None,
                                        '--author=' : None,
                                        '--change=' : None,
                                        '--message=' : None,
                                        '--pause' : None,}),
            'cp' : containers_all({'-a' : None,
                                    '-L' : None,
                                    '--archive' : None,
                                    '--follow-link' : None,}),
            'create' : images({'-a' : None,
                                '-c' : None,
                                '-e' : None,
                                '-h' : None,
                                '-i' : None,
                                '-l' : None,
                                '-m' : None,
                                '-p' : None,
                                '-P' : None,
                                '-t' : None,
                                '-u' : None,
                                '-v' : None,
                                '-w' : None,
                                '--add-host=' : None,
                                '--attach=' : None,
                                '--blkio-weight=' : None,
                                '--blkio-weight-device=' : None,
                                '--cap-add=' : None,
                                '--cap-drop=' : None,
                                '--cgroup-parent=' : None,
                                '--cgroupns=' : None,
                                '--cidfile=' : None,
                                '--cpu-period=' : None,
                                '--cpu-quota=' : None,
                                '--cpu-rt-period=' : None,
                                '--cpu-rt-runtime=' : None,
                                '--cpu-shares=' : None,
                                '--cpus=' : None,
                                '--cpuset-cpus=' : None,
                                '--cpuset-mems=' : None,
                                '--device=' : None,
                                '--device-cgroup-rule=' : None,
                                '--device-read-bps=' : None,
                                '--device-read-iops=' : None,
                                '--device-write-bps=' : None,
                                '--device-write-iops=' : None,
                                '--disable-content-trust' : None,
                                '--dns=' : None,
                                '--dns-option=' : None,
                                '--dns-search=' : None,
                                '--domainname=' : None,
                                '--entrypoint=' : None,
                                '--env=' : None,
                                '--env-file=' : None,
                                '--expose=' : None,
                                '--gpus=' : None,
                                '--group-add=' : None,
                                '--health-cmd=' : None,
                                '--health-interval=' : None,
                                '--health-retries=' : None,
                                '--health-start-period=' : None,
                                '--health-timeout=' : None,
                                '--help' : None,
                                '--hostname=' : None,
                                '--init' : None,
                                '--interactive' : None,
                                '--ip=' : None,
                                '--ip6=' : None,
                                '--ipc=' : None,
                                '--isolation=' : None,
                                '--kernel-memory=' : None,
                                '--label=' : None,
                                '--label-file=' : None,
                                '--link=' : None,
                                '--link-local-ip=' : None,
                                '--log-driver=' : None,
                                '--log-opt=' : None,
                                '--mac-address=' : None,
                                '--memory=' : None,
                                '--memory-reservation=' : None,
                                '--memory-swap=' : None,
                                '--memory-swappiness=' : None,
                                '--mount=' : None,
                                '--name=' : None,
                                '--network=' : None,
                                '--network-alias=' : None,
                                '--no-healthcheck' : None,
                                '--oom-kill-disable' : None,
                                '--oom-score-adj=' : None,
                                '--pid=' : None,
                                '--pids-limit=' : None,
                                '--platform=' : None,
                                '--privileged' : None,
                                '--publish=' : None,
                                '--publish-all' : None,
                                '--pull=' : None,
                                '--read-only' : None,
                                '--restart=' : None,
                                '--rm' : None,
                                '--runtime=' : None,
                                '--security-opt=' : None,
                                '--shm-size=' : None,
                                '--stop-signal=' : None,
                                '--stop-timeout=' : None,
                                '--storage-opt=' : None,
                                '--sysctl=' : None,
                                '--tmpfs=' : None,
                                '--tty' : None,
                                '--ulimit=' : None,
                                '--user=' : None,
                                '--userns=' : None,
                                '--uts=' : None,
                                '--volume=' : None,
                                '--volume-driver=' : None,
                                '--volumes-from=' : None,
                                '--workdir=' : None,}),
            'diff' : containers_all({}),
            'exec' : containers({'-d' : None,
                                '-e' : None,
                                '-i' : None,
                                '-t' : None,
                                '-u' : None,
                                '-w' : None,
                                '--detach' : None,
                                '--detach-keys=' : None,
                                '--env=' : None,
                                '--env-file=' : None,
                                '--interactive' : None,
                                '--privileged' : None,
                                '--tty' : None,
                                '--user=' : None,
                                '--workdir=' : None,}),
            'export' : containers_all({'-o' : None,
                                        '--output=' : None,}),
            'inspect' : containers_all({'-f' : None,
                                        '-s' : None,
                                        '--format=' : None,
                                        '--size' : None,}),
            'kill' : containers({'-s' : None,
                                '--signal=' : None,}),
            'logs' : containers_all({'-f' : None,
                                    '-n' : None,
                                    '-t' : None,
                                    '--details' : None,
                                    '--follow' : None,
                                    '--since=' : None,
                                    '--tail=' : None,
                                    '--timestamps' : None,
                                    '--until=' : None,}),
            'ls' : {'-a' : None,
                    '-f' : None,
                    '-n' : None,
                    '-l' : None,
                    '-q' : None,
                    '-s' : None,
                    '--all' : None,
                    '--filter=' : None,
                    '--format=' : None,
                    '--last=' : None,
                    '--latest' : None,
                    '--no-trunc' : None,
                    '--quiet' : None,
                    '--size' : None,},
            'pause' : containers({}),
            'port' : containers_all({}),
            'prune' : {'-f' : None,
                        '--filter=' : None,
                        '--force' : None,},
            'rename' : containers_all({}),
            'restart' : containers({'-t' : None,
                                    '--time=' : None,}),
            'rm' : containers_all({'-f' : None,
                                    '-l' : None,
                                    '-v' : None,
                                    '--force' : None,
                                    '--link' : None,
                                    '--volumes' : None,}),
            'run' : images({'-a' : None,
                            '-c' : None,
                            '-d' : None,
                            '-e' : None,
                            '-h' : None,
                            '-i' : None,
                            '-l' : None,
                            '-m' : None,
                            '-p' : None,
                            '-P' : None,
                            '-t' : None,
                            '-u' : None,
                            '-v' : None,
                            '-w' : None,
                            '--add-host=' : None,
                            '--attach=' : None,
                            '--blkio-weight=' : None,
                            '--blkio-weight-device=' : None,
                            '--cap-add=' : None,
                            '--cap-drop=' : None,
                            '--cgroup-parent=' : None,
                            '--cgroupns=' : None,
                            '--cidfile=' : None,
                            '--cpu-period=' : None,
                            '--cpu-quota=' : None,
                            '--cpu-rt-period=' : None,
                            '--cpu-rt-runtime=' : None,
                            '--cpu-shares=' : None,
                            '--cpus=' : None,
                            '--cpuset-cpus=' : None,
                            '--cpuset-mems=' : None,
                            '--detach' : None,
                            '--detach-keys=' : None,
                            '--device=' : None,
                            '--device-cgroup-rule=' : None,
                            '--device-read-bps=' : None,
                            '--device-read-iops=' : None,
                            '--device-write-bps=' : None,
                            '--device-write-iops=' : None,
                            '--disable-content-trust' : None,
                            '--dns=' : None,
                            '--dns-option=' : None,
                            '--dns-search=' : None,
                            '--domainname=' : None,
                            '--entrypoint=' : None,
                            '--env=' : None,
                            '--env-file=' : None,
                            '--expose=' : None,
                            '--gpus=' : None,
                            '--group-add=' : None,
                            '--health-cmd=' : None,
                            '--health-interval=' : None,
                            '--health-retries=' : None,
                            '--health-start-period=' : None,
                            '--health-timeout=' : None,
                            '--help' : None,
                            '--hostname=' : None,
                            '--init' : None,
                            '--interactive' : None,
                            '--ip=' : None,
                            '--ip6=' : None,
                            '--ipc=' : None,
                            '--isolation=' : None,
                            '--kernel-memory=' : None,
                            '--label=' : None,
                            '--label-file=' : None,
                            '--link=' : None,
                            '--link-local-ip=' : None,
                            '--log-driver=' : None,
                            '--log-opt=' : None,
                            '--mac-address=' : None,
                            '--memory=' : None,
                            '--memory-reservation=' : None,
                            '--memory-swap=' : None,
                            '--memory-swappiness=' : None,
                            '--mount=' : None,
                            '--name=' : None,
                            '--network=' : None,
                            '--network-alias=' : None,
                            '--no-healthcheck' : None,
                            '--oom-kill-disable' : None,
                            '--oom-score-adj=' : None,
                            '--pid=' : None,
                            '--pids-limit=' : None,
                            '--platform=' : None,
                            '--privileged' : None,
                            '--publish=' : None,
                            '--publish-all' : None,
                            '--pull=' : None,
                            '--read-only' : None,
                            '--restart=' : None,
                            '--rm' : None,
                            '--runtime=' : None,
                            '--security-opt=' : None,
                            '--shm-size=' : None,
                            '--sig-proxy' : None,
                            '--stop-signal=' : None,
                            '--stop-timeout=' : None,
                            '--storage-opt=' : None,
                            '--sysctl=' : None,
                            '--tmpfs=' : None,
                            '--tty' : None,
                            '--ulimit=' : None,
                            '--user=' : None,
                            '--userns=' : None,
                            '--uts=' : None,
                            '--volume=' : None,
                            '--volume-driver=' : None,
                            '--volumes-from=' : None,
                            '--workdir=' : None,}),
            'start' : containers_all({'-a' : None,
                                        '-i' : None,
                                        '--attach' : None,
                                        '--detach-keys=' : None,
                                        '--interactive' : None,}),
            'stats' : containers({'-a' : None,
                                    '--all' : None,
                                    '--format=' : None,
                                    '--no-stream' : None,
                                    '--no-trunc' : None,}),
            'stop' : containers({'-t' : None,
                                '--time=' : None,}),
            'top' : containers({}),
            'unpause' : containers({}),
            'update' : containers_all({'-c' : None,
                                        '-m' : None,
                                        '--blkio-weight=' : None,
                                        '--cpu-period=' : None,
                                        '--cpu-quota=' : None,
                                        '--cpu-rt-period=' : None,
                                        '--cpu-rt-runtime=' : None,
                                        '--cpu-shares=' : None,
                                        '--cpus=' : None,
                                        '--cpuset-cpus=' : None,
                                        '--cpuset-mems=' : None,
                                        '--kernel-memory=' : None,
                                        '--memory=' : None,
                                        '--memory-reservation=' : None,
                                        '--memory-swap=' : None,
                                        '--pids-limit=' : None,
                                        '--restart=' : None,}),
            'wait' : containers({}),
        },

        'context' : {
            'create' : {'--default-stack-orchestrator=' : None,
                        '--description=' : None,
                        '--docker=' : None,
                        '--from=' : None,
                        '--kubernetes=' : None,},
            'export' : {'--kubeconfig' : None},
            'import' : None,
            'inspect' : {'-f' : None,
                        '--format=' : None,},
            'ls' : {'-q' : None,
                    '--format=' : None,
                    '--quiet' : None,},
            'rm' : {'-f' : None,
                    '--force' : None,},
            'update' : {'--default-stack-orchestrator=' : None,
                        '--description=' : None,
                        '--docker=' : None,
                        '--kubernetes=' : None,},
            'use' : None,
        },

        'image' : {
            'build' : {'-c' : None,
                        '-f' : None,
                        '-m' : None,
                        '-q' : None,
                        '-t' : None,
                        '--add-host=' : None,
                        '--build-arg=' : None,
                        '--cache-from=' : None,
                        '--cgroup-parent=' : None,
                        '--compress' : None,
                        '--cpu-period=' : None,
                        '--cpu-quota=' : None,
                        '--cpu-shares=' : None,
                        '--cpuset-cpus=' : None,
                        '--cpuset-mems=' : None,
                        '--disable-content-trust' : None,
                        '--file=' : None,
                        '--force-rm' : None,
                        '--iidfile=' : None,
                        '--isolation=' : None,
                        '--label=' : None,
                        '--memory=' : None,
                        '--memory-swap=' : None,
                        '--network=' : None,
                        '--no-cache' : None,
                        '--pull' : None,
                        '--quiet' : None,
                        '--rm' : None,
                        '--security-opt=' : None,
                        '--shm-size=' : None,
                        '--squash' : None,
                        '--tag=' : None,
                        '--target=' : None,
                        '--ulimit=' : None,},
            'history' : images({'-H' : None,
                                '-q' : None,
                                '--format=' : None,
                                '--human' : None,
                                '--no-trunc' : None,
                                '--quiet' : None,}),
            'import' : {'-c' : None,
                        '-m' : None,
                        '--change=' : None,
                        '--message=' : None,
                        '--platform=' : None,},
            'inspect' : images({'-f' : None,
                        '--format=' : None,}),
            'load' : {'-i' : None,
                    '-q' : None,
                    '--input=' : None,
                    '--quiet' : None,},
            'ls' : {'-a' : None,
                    '-f' : None,
                    '-q' : None,
                    '--all' : None,
                    '--digests' : None,
                    '--filter=' : None,
                    '--format=' : None,
                    '--no-trunc' : None,
                    '--quiet' : None,},
            'prune' : {'-a' : None,
                        '-f' : None,
                        '--all' : None,
                        '--filter=' : None,
                        '--force' : None,},
            'pull' : {'-a' : None,
                    '-q' : None,
                    '--all-tags' : None,
                    '--disable-content-trust' : None,
                    '--platform=' : None,
                    '--quiet' : None,},
            'push' : images({'-a' : None,
                            '-q' : None,
                            '--all-tags' : None,
                            '--disable-content-trust' : None,
                            '--quiet' : None,}),
            'rm' : images({'-f' : None,
                            '--force' : None,
                            '--no-prune' : None,}),
            'save' : images({'-o' : None,
                            '--output=' : None,}),
            'tag' : images({}),
        },

        'manifest' : {
            'annotate' : {'--arch=' : None,
                            '--os=' : None,
                            '--os-features=' : None,
                            '--os-version=' : None,
                            '--variant=' : None,},
            'create' : {'-a' : None,
                        '--amend' : None,
                        '--insecure' : None,},
            'inspect' : {'-v' : None,
                        '--insecure' : None,
                        '--verbose' : None,},
            'push' : {'-p' : None,
                    '--insecure' : None,
                    '--purge' : None,},
            'rm' : None,
        },

        'network' : {
            'connect' : networks({'--alias=' : None,
                                    '--driver-opt=' : None,
                                    '--ip=' : None,
                                    '--ip6=' : None,
                                    '--link=' : None,
                                    '--link-local-ip=' : None,}),
            'create' : {'-d' : None,
                        '-o' : None,
                        '--attachable' : None,
                        '--aux-address=' : None,
                        '--config-from=' : None,
                        '--config-only' : None,
                        '--driver=' : None,
                        '--gateway=' : None,
                        '--ingress' : None,
                        '--internal' : None,
                        '--ip-range=' : None,
                        '--ipam-driver=' : None,
                        '--ipam-opt=' : None,
                        '--ipv6' : None,
                        '--label=' : None,
                        '--opt=' : None,
                        '--scope=' : None,
                        '--subnet=' : None,},
            'disconnect' : networks({'-f' : None,
                        '--force' : None,}),
            'inspect' : networks({'-f' : None,
                                '-v' : None,
                                '--format=' : None,
                                '--verbose' : None,}, cnts=False),
            'ls' : {'-f' : None,
                    '-q' : None,
                    '--filter=' : None,
                    '--format=' : None,
                    '--no-trunc' : None,
                    '--quiet' : None,},
            'prune' : {'-f' : None,
                        '--filter=' : None,
                        '--force' : None,},
            'rm' : networks({}, cnts=False),
        },

        'node' : {
            'demote' : None,
            'inspect' : {'-f' : None,
                        '--format=' : None,
                        '--pretty' : None,},
            'ls' : {'-f' : None,
                    '-q' : None,
                    '--filter=' : None,
                    '--format=' : None,
                    '--quiet' : None,},
            'promote' : None,
            'ps' : {'-f' : None,
                    '-q' : None,
                    '--filter=' : None,
                    '--format=' : None,
                    '--no-resolve' : None,
                    '--no-trunc' : None,
                    '--quiet' : None,},
            'rm' : {'-f' : None,
                    '--force' : None,},
            'update' : {'--availability=' : None,
                        '--label-add=' : None,
                        '--label-rm=' : None,
                        '--role=' : None,},
        },

        'plugin' : {
            'create' : {'--compress' : None},
            'disable' : {'-f' : None,
                    '--force' : None,},
            'enable' : {'--timeout=' : None},
            'inspect' : {'-f' : None,
                        '--format=' : None,},
            'install' : {'--alias=' : None,
                        '--disable' : None,
                        '--disable-content-trust' : None,
                        '--grant-all-permissions' : None,},
            'ls' : {'-f' : None,
                    '-q' : None,
                    '--filter=' : None,
                    '--format=' : None,
                    '--no-trunc' : None,
                    '--quiet' : None,},
            'push' : {'--disable-content-trust' : None,},
            'rm' : {'-f' : None,
                    '--force' : None,},
            'set' : None,
            'upgrade' : {'--disable-content-trust' : None,
                        '--grant-all-permissions' : None,
                        '--skip-remote-check' : None,},
        },

        'scan' : images({'-f' : None,
                        '--accept-license' : None,
                        '--dependency-tree' : None,
                        '--exclude-base' : None,
                        '--group-issues' : None,
                        '--login' : None,
                        '--reject-license' : None,
                        '--severity=' : None,
                        '--token=' : None,
                        '--version' : None,}),

        'secret' : {
            'create' : {'-d' : None,
                        '-l' : None,
                        '--driver=' : None,
                        '--label=' : None,
                        '--template-driver=' : None,},
            'inspect' : {'-f' : None,
                        '--format=' : None,
                        '--pretty' : None,},
            'ls' : {'-f' : None,
                    '-q' : None,
                    '--filter=' : None,
                    '--format=' : None,
                    '--quiet' : None,},
            'rm' : None,
        },

        'service' : {
            'create' : {'-d' : None,
                        '-e' : None,
                        '-l' : None,
                        '-p' : None,
                        '-q' : None,
                        '-t' : None,
                        '-u' : None,
                        '-w' : None,
                        '--cap-add=' : None,
                        '--cap-drop=' : None,
                        '--config=' : None,
                        '--constraint=' : None,
                        '--container-label=' : None,
                        '--credential-spec=' : None,
                        '--detach' : None,
                        '--dns=' : None,
                        '--dns-option=' : None,
                        '--dns-search=' : None,
                        '--endpoint-mode=' : None,
                        '--entrypoint=' : None,
                        '--env=' : None,
                        '--env-file=' : None,
                        '--generic-resource=' : None,
                        '--group=' : None,
                        '--health-cmd=' : None,
                        '--health-interval=' : None,
                        '--health-retries=' : None,
                        '--health-start-period=' : None,
                        '--health-timeout=' : None,
                        '--host=' : None,
                        '--hostname=' : None,
                        '--init' : None,
                        '--isolation=' : None,
                        '--label=' : None,
                        '--limit-cpu=' : None,
                        '--limit-memory=' : None,
                        '--limit-pids=' : None,
                        '--log-driver=' : None,
                        '--log-opt=' : None,
                        '--max-concurrent=' : None,
                        '--mount=' : None,
                        '--name=' : None,
                        '--network=' : None,
                        '--no-healthcheck' : None,
                        '--no-resolve-image' : None,
                        '--placement-pref=' : None,
                        '--publish=' : None,
                        '--quiet' : None,
                        '--read-only' : None,
                        '--replicas=' : None,
                        '--replicas-max-per-node=' : None,
                        '--reserve-cpu=' : None,
                        '--reserve-memory=' : None,
                        '--restart-condition=' : None,
                        '--restart-delay=' : None,
                        '--restart-max-attempts=' : None,
                        '--restart-window=' : None,
                        '--rollback-delay=' : None,
                        '--rollback-failure-action=' : None,
                        '--rollback-max-failure-ratio=' : None,
                        '--rollback-monitor=' : None,
                        '--rollback-order=' : None,
                        '--rollback-parallelism=' : None,
                        '--secret=' : None,
                        '--stop-grace-period=' : None,
                        '--stop-signal=' : None,
                        '--sysctl=' : None,
                        '--tty' : None,
                        '--ulimit=' : None,
                        '--update-delay=' : None,
                        '--update-failure-action=' : None,
                        '--update-max-failure-ratio=' : None,
                        '--update-monitor=' : None,
                        '--update-order=' : None,
                        '--update-parallelism=' : None,
                        '--user=' : None,
                        '--with-registry-auth' : None,
                        '--workdir=' : None,},
            'inspect' : {'-f' : None,
                        '--format=' : None,
                        '--pretty' : None,},
            'logs' : {'-f' : None,
                        '-n' : None,
                        '--details' : None,
                        '--follow' : None,
                        '--no-resolve' : None,
                        '--no-task-ids' : None,
                        '--no-trunc' : None,
                        '--raw' : None,
                        '--since=' : None,
                        '--tail=' : None,},
            'ls' : {'-f' : None,
                    '-q' : None,
                    '--filter=' : None,
                    '--format=' : None,
                    '--quiet' : None,},
            'ps' : {'-f' : None,
                    '-q' : None,
                    '--filter=' : None,
                    '--format=' : None,
                    '--no-resolve' : None,
                    '--no-trunc' : None,
                    '--quiet' : None,},
            'rm' : None,
            'rollback' : {'-d' : None,
                            '-q' : None,
                            '--detach' : None,
                            '--quiet' : None,},
            'scale' : {'-d' : None,
                        '--detach' : None,},
            'update' : {'-d' : None,
                        '-q' : None,
                        '-t' : None,
                        '-u' : None,
                        '-w' : None,
                        '--args=' : None,
                        '--cap-add=' : None,
                        '--cap-drop=' : None,
                        '--config-add=' : None,
                        '--config-rm=' : None,
                        '--constraint-add=' : None,
                        '--constraint-rm=' : None,
                        '--container-label-add=' : None,
                        '--container-label-rm=' : None,
                        '--credential-spec=' : None,
                        '--detach' : None,
                        '--dns-add=' : None,
                        '--dns-option-add=' : None,
                        '--dns-option-rm=' : None,
                        '--dns-rm=' : None,
                        '--dns-search-add=' : None,
                        '--dns-search-rm=' : None,
                        '--endpoint-mode=' : None,
                        '--entrypoint=' : None,
                        '--env-add=' : None,
                        '--env-rm=' : None,
                        '--force' : None,
                        '--generic-resource-add=' : None,
                        '--generic-resource-rm=' : None,
                        '--group-add=' : None,
                        '--group-rm=' : None,
                        '--health-cmd=' : None,
                        '--health-interval=' : None,
                        '--health-retries=' : None,
                        '--health-start-period=' : None,
                        '--health-timeout=' : None,
                        '--host-add=' : None,
                        '--host-rm=' : None,
                        '--hostname=' : None,
                        '--image=' : None,
                        '--init' : None,
                        '--isolation=' : None,
                        '--label-add=' : None,
                        '--label-rm=' : None,
                        '--limit-cpu=' : None,
                        '--limit-memory=' : None,
                        '--limit-pids=' : None,
                        '--log-driver=' : None,
                        '--log-opt=' : None,
                        '--max-concurrent=' : None,
                        '--mount-rm=' : None,
                        '--network-add=' : None,
                        '--network-rm=' : None,
                        '--no-healthcheck' : None,
                        '--no-resolve-image' : None,
                        '--placement-pref-add=' : None,
                        '--placement-pref-rm=' : None,
                        '--publish-add=' : None,
                        '--publish-rm=' : None,
                        '--quiet' : None,
                        '--read-only' : None,
                        '--replicas=' : None,
                        '--replicas-max-per-node=' : None,
                        '--reserve-cpu=' : None,
                        '--reserve-memory=' : None,
                        '--restart-condition=' : None,
                        '--restart-delay=' : None,
                        '--restart-max-attempts=' : None,
                        '--restart-window=' : None,
                        '--rollback' : None,
                        '--rollback-delay=' : None,
                        '--rollback-failure-action=' : None,
                        '--rollback-max-failure-ratio=' : None,
                        '--rollback-monitor=' : None,
                        '--rollback-order=' : None,
                        '--rollback-parallelism=' : None,
                        '--secret-add=' : None,
                        '--secret-rm=' : None,
                        '--stop-grace-period=' : None,
                        '--stop-signal=' : None,
                        '--sysctl-add=' : None,
                        '--sysctl-rm=' : None,
                        '--tty' : None,
                        '--ulimit-add=' : None,
                        '--ulimit-rm=' : None,
                        '--update-delay=' : None,
                        '--update-failure-action=' : None,
                        '--update-max-failure-ratio=' : None,
                        '--update-monitor=' : None,
                        '--update-order=' : None,
                        '--update-parallelism=' : None,
                        '--user=' : None,
                        '--with-registry-auth' : None,
                        '--workdir=' : None,},
        },

        'stack' : {
            'deploy' : {'-c' : None,
                        '--compose-file=' : None,
                        '--orchestrator=' : None,
                        '--prune' : None,
                        '--resolve-image=' : None,
                        '--with-registry-auth' : None,},
            'ls' : {'--format=' : None,
                    '--orchestrator=' : None,},
            'ps' : {'-f' : None,
                    '-q' : None,
                    '--filter=' : None,
                    '--format=' : None,
                    '--no-resolve' : None,
                    '--no-trunc' : None,
                    '--orchestrator=' : None,
                    '--quiet' : None,},
            'rm' : {'--orchestrator=' : None,},
            'services' : {'-f' : None,
                            '-q' : None,
                            '--filter=' : None,
                            '--format=' : None,
                            '--orchestrator=' : None,
                            '--quiet' : None,},
        },

        'swarm' : {
            'ca' : {'-d' : None,
                    '-q' : None,
                    '--ca-cert=' : None,
                    '--ca-key=' : None,
                    '--cert-expiry=' : None,
                    '--detach' : None,
                    '--external-ca=' : None,
                    '--quiet' : None,
                    '--rotate' : None,},
            'init' : {'--advertise-addr=' : None,
                    '--autolock' : None,
                    '--availability=' : None,
                    '--cert-expiry=' : None,
                    '--data-path-addr=' : None,
                    '--data-path-port=' : None,
                    '--default-addr-pool=' : None,
                    '--default-addr-pool-mask-length=' : None,
                    '--dispatcher-heartbeat=' : None,
                    '--external-ca=' : None,
                    '--force-new-cluster' : None,
                    '--listen-addr=' : None,
                    '--max-snapshots=' : None,
                    '--snapshot-interval=' : None,
                    '--task-history-limit=' : None,},
            'join' : {'--advertise-addr=' : None,
                    '--availability=' : None,
                    '--data-path-addr=' : None,
                    '--listen-addr=' : None,
                    '--token=' : None,},
            'join-token' : {'-q' : None,
                            '--quiet' : None,
                            '--rotate' : None,},
            'leave' : {'-f' : None,
                        '--force' : None,},
            'unlock' : None,
            'unlock-key' : {'-q' : None,
                            '--quiet' : None,
                            '--rotate' : None,},
            'update' : {'--autolock' : None,
                        '--cert-expiry=' : None,
                        '--dispatcher-heartbeat=' : None,
                        '--external-ca=' : None,
                        '--max-snapshots=' : None,
                        '--snapshot-interval=' : None,
                        '--task-history-limit=' : None,},
        },

        'system' : {
            'df' : {'-v' : None,
                    '--format=' : None,
                    '--verbose' : None,},
            'events' : {'-f' : None,
                        '--filter=' : None,
                        '--format=' : None,
                        '--since=' : None,
                        '--until=' : None,},
            'info' : {'-f' : None,
                        '--format=' : None,},
            'prune' : {'-a' : None,
                        '-f' : None,
                        '--all' : None,
                        '--filter=' : None,
                        '--force' : None,
                        '--volumes' : None,},
        },

        'trust' : {
            'key' : {
                'generate' : {'--dir=' : None,},
                'load' : {'--name=' : None,},
            },
            'signer' : {
                'add' : {'--key=' : None,},
                'remove' : {'-f' : None,
                            '--force' : None,},
            },
            'inspect' : images({'--pretty' : None,}),
            'revoke' : images({'-y' : None,
                        '--yes' : None,}),
            'sign' : images({'--local' : None,}),
        },
        'volume' : {
            'create' : {'-d' : None,
                        '-o' : None,
                        '--driver=' : None,
                        '--label=' : None,
                        '--opt=' : None,},
            'inspect' : volumes({'-f' : None,
                        '--format=' : None,}),
            'ls' : {'-f' : None,
                    '-q' : None,
                    '--filter=' : None,
                    '--format=' : None,
                    '--quiet' : None,},
            'prune' : {'-f' : None,
                        '--filter=' : None,
                        '--force' : None,},
            'rm' : volumes({'-f' : None,
                        '--force' : None,}),
        },

    #Docker Commands

        'attach' : containers({
            '--detach-keys=' : None,
            '--no-stdin' : None,
            '--sig-proxy' : None,
        }),
        
        'build' : {'-c' : None,
                    '-f' : None,
                    '-m' : None,
                    '-q' : None,
                    '-t' : None,
                    '--add-host=' : None,
                    '--build-arg=' : None,
                    '--cache-from=' : None,
                    '--cgroup-parent=' : None,
                    '--compress' : None,
                    '--cpu-period=' : None,
                    '--cpu-quota=' : None,
                    '--cpu-shares=' : None,
                    '--cpuset-cpus=' : None,
                    '--cpuset-mems=' : None,
                    '--disable-content-trust' : None,
                    '--file=' : None,
                    '--force-rm' : None,
                    '--iidfile=' : None,
                    '--isolation=' : None,
                    '--label=' : None,
                    '--memory=' : None,
                    '--memory-swap=' : None,
                    '--network=' : None,
                    '--no-cache' : None,
                    '--pull' : None,
                    '--quiet' : None,
                    '--rm' : None,
                    '--security-opt=' : None,
                    '--shm-size=' : None,
                    '--squash' : None,
                    '--tag=' : None,
                    '--target=' : None,
                    '--ulimit=' : None,},
        
        'commit' : containers_all({'-a' : None,
                    '-c' : None,
                    '-m' : None,
                    '-p' : None,
                    '--author=' : None,
                    '--change=' : None,
                    '--message=' : None,
                    '--pause' : None,}),

        'cp' : containers_all({'-a' : None,
                '-L' : None,
                '--archive' : None,
                '--follow-link' : None,}),

        'create' : images({'-a' : None,
                            '-c' : None,
                            '-e' : None,
                            '-h' : None,
                            '-i' : None,
                            '-l' : None,
                            '-m' : None,
                            '-p' : None,
                            '-P' : None,
                            '-t' : None,
                            '-u' : None,
                            '-v' : None,
                            '-w' : None,
                            '--add-host=' : None,
                            '--attach=' : None,
                            '--blkio-weight=' : None,
                            '--blkio-weight-device=' : None,
                            '--cap-add=' : None,
                            '--cap-drop=' : None,
                            '--cgroup-parent=' : None,
                            '--cgroupns=' : None,
                            '--cidfile=' : None,
                            '--cpu-period=' : None,
                            '--cpu-quota=' : None,
                            '--cpu-rt-period=' : None,
                            '--cpu-rt-runtime=' : None,
                            '--cpu-shares=' : None,
                            '--cpus=' : None,
                            '--cpuset-cpus=' : None,
                            '--cpuset-mems=' : None,
                            '--device=' : None,
                            '--device-cgroup-rule=' : None,
                            '--device-read-bps=' : None,
                            '--device-read-iops=' : None,
                            '--device-write-bps=' : None,
                            '--device-write-iops=' : None,
                            '--disable-content-trust' : None,
                            '--dns=' : None,
                            '--dns-option=' : None,
                            '--dns-search=' : None,
                            '--domainname=' : None,
                            '--entrypoint=' : None,
                            '--env=' : None,
                            '--env-file=' : None,
                            '--expose=' : None,
                            '--gpus=' : None,
                            '--group-add=' : None,
                            '--health-cmd=' : None,
                            '--health-interval=' : None,
                            '--health-retries=' : None,
                            '--health-start-period=' : None,
                            '--health-timeout=' : None,
                            '--help' : None,
                            '--hostname=' : None,
                            '--init' : None,
                            '--interactive' : None,
                            '--ip=' : None,
                            '--ip6=' : None,
                            '--ipc=' : None,
                            '--isolation=' : None,
                            '--kernel-memory=' : None,
                            '--label=' : None,
                            '--label-file=' : None,
                            '--link=' : None,
                            '--link-local-ip=' : None,
                            '--log-driver=' : None,
                            '--log-opt=' : None,
                            '--mac-address=' : None,
                            '--memory=' : None,
                            '--memory-reservation=' : None,
                            '--memory-swap=' : None,
                            '--memory-swappiness=' : None,
                            '--mount=' : None,
                            '--name=' : None,
                            '--network=' : None,
                            '--network-alias=' : None,
                            '--no-healthcheck' : None,
                            '--oom-kill-disable' : None,
                            '--oom-score-adj=' : None,
                            '--pid=' : None,
                            '--pids-limit=' : None,
                            '--platform=' : None,
                            '--privileged' : None,
                            '--publish=' : None,
                            '--publish-all' : None,
                            '--pull=' : None,
                            '--read-only' : None,
                            '--restart=' : None,
                            '--rm' : None,
                            '--runtime=' : None,
                            '--security-opt=' : None,
                            '--shm-size=' : None,
                            '--stop-signal=' : None,
                            '--stop-timeout=' : None,
                            '--storage-opt=' : None,
                            '--sysctl=' : None,
                            '--tmpfs=' : None,
                            '--tty' : None,
                            '--ulimit=' : None,
                            '--user=' : None,
                            '--userns=' : None,
                            '--uts=' : None,
                            '--volume=' : None,
                            '--volume-driver=' : None,
                            '--volumes-from=' : None,
                            '--workdir=' : None,}),

        'diff' : containers_all({}),
        
        'events' : {
            '-f' : None,
            '--filter=' : None,
            '--format=' : None,
            '--since=' : None,
            '--until=' : None,
        },

        'exec' : containers({'-d' : None,
                    '-e' : None,
                    '-i' : None,
                    '-t' : None,
                    '-u' : None,
                    '-w' : None,
                    '--detach' : None,
                    '--detach-keys=' : None,
                    '--env=' : None,
                    '--env-file=' : None,
                    '--interactive' : None,
                    '--privileged' : None,
                    '--tty' : None,
                    '--user=' : None,
                    '--workdir=' : None,}),

        'export' : containers_all({
            '-o' : None,
            '--output=' : None,
        }),

        'history' : images({'-H' : None,
                        '-q' : None,
                        '--format=' : None,
                        '--human' : None,
                        '--no-trunc' : None,
                        '--quiet' : None,}),

        'help' : None,

        'images' : {'-a' : None,
                    '-f' : None,
                    '-q' : None,
                    '--all' : None,
                    '--digests' : None,
                    '--filter=' : None,
                    '--format=' : None,
                    '--no-trunc' : None,
                    '--quiet' : None,},

        'import' : {
            '-c' : None,
            '-m' : None,
            '--change=' : None,
            '--message=' : None,
            '--platform=' : None,
        },

        'info' : {
            '-f' : None,
            '--format=' : None,
        },

        'inspect' : {
            '-f' : None,
            '-s' : None,
            '--format=' : None,
            '--size' : None,
            '--type=' : None,
        },

        'kill' : containers({
            '-s' : None,
            '--signal=' : None,
        }),

        'load' : {
            '-i' : None,
            '-q' : None,
            '--input=' : None,
            '--quiet' : None,
        },
        
        'login' : {
            '-p' : None,
            '-u' : None,
            '--password=' : None,
            '--password-stdin' : None,
            '--username=' : None,
        },

        'logout' : None,
        'logs' : containers_all({'-f' : None,
                    '-n' : None,
                    '-t' : None,
                    '--details' : None,
                    '--follow' : None,
                    '--since=' : None,
                    '--tail=' : None,
                    '--timestamps' : None,
                    '--until=' : None,}),

        'pause' : containers({}),
        'port' : containers_all({}),
        
        'ps' : {'-a' : None,
                '-f' : None,
                '-n' : None,
                '-l' : None,
                '-q' : None,
                '-s' : None,
                '--all' : None,
                '--filter=' : None,
                '--format=' : None,
                '--last=' : None,
                '--latest' : None,
                '--no-trunc' : None,
                '--quiet' : None,
                '--size' : None,},

        'pull' : {'-a' : None,
                    '-q' : None,
                    '--all-tags' : None,
                    '--disable-content-trust' : None,
                    '--platform=' : None,
                    '--quiet' : None,},

        'push' : images({'-a' : None,
                    '-q' : None,
                    '--all-tags' : None,
                    '--disable-content-trust' : None,
                    '--quiet' : None,}),

        'rename' : containers_all({}),
        'restart' : containers({
            '-t' : None,
            '--time=' : None,
        }),

        'rm' : containers_all({'-f' : None,
                                '-l' : None,
                                '-v' : None,
                                '--force' : None,
                                '--link' : None,
                                '--volumes' : None,}),

        'rmi' : images({'-f' : None,
                        '--force' : None,
                        '--no-prune' : None,}),

        'run' : images({'-a' : None,
                        '-c' : None,
                        '-d' : None,
                        '-e' : None,
                        '-h' : None,
                        '-i' : None,
                        '-l' : None,
                        '-m' : None,
                        '-p' : None,
                        '-P' : None,
                        '-t' : None,
                        '-u' : None,
                        '-v' : None,
                        '-w' : None,
                        '--add-host=' : None,
                        '--attach=' : None,
                        '--blkio-weight=' : None,
                        '--blkio-weight-device=' : None,
                        '--cap-add=' : None,
                        '--cap-drop=' : None,
                        '--cgroup-parent=' : None,
                        '--cgroupns=' : None,
                        '--cidfile=' : None,
                        '--cpu-period=' : None,
                        '--cpu-quota=' : None,
                        '--cpu-rt-period=' : None,
                        '--cpu-rt-runtime=' : None,
                        '--cpu-shares=' : None,
                        '--cpus=' : None,
                        '--cpuset-cpus=' : None,
                        '--cpuset-mems=' : None,
                        '--detach' : None,
                        '--detach-keys=' : None,
                        '--device=' : None,
                        '--device-cgroup-rule=' : None,
                        '--device-read-bps=' : None,
                        '--device-read-iops=' : None,
                        '--device-write-bps=' : None,
                        '--device-write-iops=' : None,
                        '--disable-content-trust' : None,
                        '--dns=' : None,
                        '--dns-option=' : None,
                        '--dns-search=' : None,
                        '--domainname=' : None,
                        '--entrypoint=' : None,
                        '--env=' : None,
                        '--env-file=' : None,
                        '--expose=' : None,
                        '--gpus=' : None,
                        '--group-add=' : None,
                        '--health-cmd=' : None,
                        '--health-interval=' : None,
                        '--health-retries=' : None,
                        '--health-start-period=' : None,
                        '--health-timeout=' : None,
                        '--help' : None,
                        '--hostname=' : None,
                        '--init' : None,
                        '--interactive' : None,
                        '--ip=' : None,
                        '--ip6=' : None,
                        '--ipc=' : None,
                        '--isolation=' : None,
                        '--kernel-memory=' : None,
                        '--label=' : None,
                        '--label-file=' : None,
                        '--link=' : None,
                        '--link-local-ip=' : None,
                        '--log-driver=' : None,
                        '--log-opt=' : None,
                        '--mac-address=' : None,
                        '--memory=' : None,
                        '--memory-reservation=' : None,
                        '--memory-swap=' : None,
                        '--memory-swappiness=' : None,
                        '--mount=' : None,
                        '--name=' : None,
                        '--network=' : None,
                        '--network-alias=' : None,
                        '--no-healthcheck' : None,
                        '--oom-kill-disable' : None,
                        '--oom-score-adj=' : None,
                        '--pid=' : None,
                        '--pids-limit=' : None,
                        '--platform=' : None,
                        '--privileged' : None,
                        '--publish=' : None,
                        '--publish-all' : None,
                        '--pull=' : None,
                        '--read-only' : None,
                        '--restart=' : None,
                        '--rm' : None,
                        '--runtime=' : None,
                        '--security-opt=' : None,
                        '--shm-size=' : None,
                        '--sig-proxy' : None,
                        '--stop-signal=' : None,
                        '--stop-timeout=' : None,
                        '--storage-opt=' : None,
                        '--sysctl=' : None,
                        '--tmpfs=' : None,
                        '--tty' : None,
                        '--ulimit=' : None,
                        '--user=' : None,
                        '--userns=' : None,
                        '--uts=' : None,
                        '--volume=' : None,
                        '--volume-driver=' : None,
                        '--volumes-from=' : None,
                        '--workdir=' : None,}),

        'save' : images({
            '-o' : None,
            '--output=' : None,
        }),

        'search' : {
            '-f' : None,
            '--filter=' : None,
            '--format=' : None,
            '--limit=' : None,
            '--no-trunc' : None,
        },

        'start' : containers_all({'-a' : None,
                                    '-i' : None,
                                    '--attach' : None,
                                    '--detach-keys=' : None,
                                    '--interactive' : None,}),
        'stop' : containers({'--time=' : None,}),
        'tag' : images({}),
        'top' : containers({}),
        'unpause' : containers({}),

        'update' : containers({
            '-c' : None,
            '-m' : None,
            '--blkio-weight=' : None,
            '--cpu-period=' : None,
            '--cpu-quota=' : None,
            '--cpu-rt-period=' : None,
            '--cpu-rt-runtime=' : None,
            '--cpu-shares=' : None,
            '--cpus=' : None,
            '--cpuset-cpus=' : None,
            '--cpuset-mems=' : None,
            '--kernel-memory=' : None,
            '--memory=' : None,
            '--memory-reservation=' : None,
            '--memory-swap=' : None,
            '--pids-limit=' : None,
            '--restart=' : None,}),
        
        'version' : {
            '-f' : None,
            '--format=' : None,
            '--kubeconfig=' : None,
        },
        'wait' : containers({}),

    # Custom Commands

        'clear' : None,
        'exit' : None,
        'quit' : None,
    }
    return commands
