#!/usr/bin/python3

import subprocess

raw_output = subprocess.check_output(['docker', 'ps', '-a', '--no-trunc', '--format', '"{{.ID}};{{.Image}};{{.Command}};{{.CreatedAt}};{{.Status}};{{.Ports}};{{.Names}};{{.Mounts}};{{.Size}};{{.RunningFor}};{{.Networks}}"'])
lines = raw_output.splitlines()

for line in lines:
    columns = str(line).split(';')
    for i in range(len(columns)): columns[i] = columns[i].strip()
    if(len(columns) != 11):
        continue
    
    column_container_id = columns[0][3:][:20]
    column_image = columns[1]
    column_command = columns[2][1:-1]
    column_created_at = columns[3]
    column_status = columns[4]
    column_ports = columns[5]
    column_names = columns[6]
    column_mounts = columns[7]
    column_size = columns[8]
    column_running_for = columns[9]
    column_networks = columns[10][:-2]

    ports_split = column_ports.split(',')
    for i in range(len(ports_split)): ports_split[i] = ports_split[i].strip()
    ports_split = [port for port in ports_split if len(port.strip()) > 0 and port != "\n"]
    mounts_split = column_mounts.split(',')
    for i in range(len(mounts_split)): mounts_split[i] = mounts_split[i].strip()
    mounts_split = [mount for mount in mounts_split if len(mount.strip()) > 0 and mount != "\n"]

    print(f"{column_names}:")
    print(f"  ID:       {column_container_id}..")
    print(f"  Image:    {column_image}")
    print(f"  Status:   {column_status}")
    print(f"  Created:  {column_running_for}")
    print(f"  Size:     {column_size}")
    print(f"  Command:  {column_command}")
    print(f"  Networks: {column_networks}")
    if(len(ports_split) > 0):
        print(f"  Ports:    {ports_split[0]}")
        for i in range(len(ports_split) - 1):
            print(f"            {ports_split[i + 1]}")
    if(len(mounts_split) > 0):
        print(f"  Mounts:   {mounts_split[0]}")
        for i in range(len(mounts_split) - 1):
            print(f"            {mounts_split[i + 1]}")
