#!/usr/bin/env python
"""
  Generate the partitions json file from the $OC* environment variables

  Usage: onos-gen-partitions [output file]
  If output file is not provided, the json is written to stdout.
"""

from os import environ
from collections import deque, OrderedDict
import re
import json
import sys
import random
import string

convert = lambda text: int(text) if text.isdigit() else text.lower()
alphanum_key = lambda key: [convert(c) for c in re.split('([0-9]+)', key)]

def get_OC_vars():
  vars = []
  for var in environ:
    if re.match(r"OC[0-9]+", var):
      vars.append(var)
  return sorted(vars, key=alphanum_key)

def get_nodes(vars, port=9876):
  node = lambda k: { 'id': k, 'ip': k, 'port': port }
  return [ node(environ[v]) for v in vars ]

def generate_permutations(nodes, k):
  l = deque(nodes)
  perms = []
  for i in range(1, len(nodes)+1):
    part = {
             'name': 'p%d' % i,
             'members': list(l)[:k]
           }
    perms.append(part)
    l.rotate(-1)
  return perms

if __name__ == '__main__':
  vars = get_OC_vars()
  nodes = get_nodes(vars)
  partitions = generate_permutations([v.get('id') for v in nodes], 3)
  name = 0
  for node in nodes:
      name = name ^ node['ip']
  data = {
           'name': name,
           'nodes': nodes,
           'partitions': partitions
         }
  output = json.dumps(data, indent=4)

  if len(sys.argv) == 2:
    filename = sys.argv[1]
    with open(filename, 'w') as f:
      f.write(output)
  else:
    print output
