#!/usr/bin/env python3
from functools import partial
import json
from subprocess import check_output
import sys

def get_unique(func, wss):
    return list(set(map(func, wss)))

def get_unique_key(key, wss):
    return get_unique(lambda ws: ws[key], wss)

def show_workspace(ws):
    color = 'f00' if ws['urgent'] else \
            '00fcff' if ws['focused'] else \
            '6aa3f8' if ws['visible'] else \
            '777'
    return '<fc=#%s>%s</fc>' % (color, ws['name'])

def show_output(wss, op):
    wss = list(filter(lambda ws: ws['output'] == op, wss))
    wss.sort(key=lambda ws: ws['name'])

    return op + ' ' + ' '.join(map(show_workspace, wss))

def main():
    i3ws = check_output(['i3-msg', '-t', 'get_workspaces']).decode('utf-8')
    wss = json.loads(i3ws)
    
    outputs = sorted(get_unique_key('output', wss))
    print(' * '.join(map(partial(show_output, wss), outputs)))

if __name__ == '__main__':
    main()