#!/usr/bin/env python

import argparse

from unifi.controller import Controller

parser = argparse.ArgumentParser()
parser.add_argument('-c', '--controller', default='unifi', help='the controller address (default "unifi")')
parser.add_argument('-u', '--username', default='admin', help='the controller usernane (default("admin")')
parser.add_argument('-p', '--password', default='', help='the controller password')
args = parser.parse_args()

c = Controller(args.controller, args.username, args.password)

aps = c.get_aps()
ap_names = dict([(ap['mac'], ap['name']) for ap in aps])
clients = c.get_clients()
clients.sort(key=lambda x: -x['rssi'])

FORMAT = '%-16s  %18s  %-12s  %4s  %4s  %3s  %3s'
print(FORMAT % ('NAME', 'MAC', 'AP', 'CHAN', 'RSSI', 'RX', 'TX'))
for client in clients:
    ap_name = ap_names[client['ap_mac']]
    name = client['hostname'] or client['ip'] or client['mac']
    rssi = client['rssi']
    mac = client['mac']
    rx = int(client['rx_rate'] / 1000)
    tx = int(client['tx_rate'] / 1000)
    channel = client['channel']

    print(FORMAT % (name, mac, ap_name, channel, rssi, rx, tx))
