#!/usr/bin/python3
# LAVA Controls - Copyright 2018 Lucid Networks - Stephen Loeckle

import configparser
import argparse
import traceback
from sys import exit
from pathlib import Path

def main():

# Set some defaults
    platform = 'de'
    licensekey = ''
    token = ''
    loglevel = '10'
    walllayout = ''
    wallmatrixip = ''
    proxy = ''

# Try to read old nexp-controls.conf for license key
    lavacontrolsconffile = '/etc/lavacontrols/lavacontrols.conf'
    islavacontrolsconffile = Path(lavacontrolsconffile)
    if islavacontrolsconffile.is_file():
        lavacontrolsconfig = configparser.ConfigParser()
        try:
            lavacontrolsconfig.read(lavacontrolsconffile)
        except:
            msg = ("Can't read /etc/lavacontrols/lavacontrols.conf")
            print(msg)
            err = traceback.format_exc()
            print(err)
            pass
            exit()
        else:
            try:
                platform = lavacontrolsconfig.get('system', 'platform')
            except:
                msg = ("Can't parse platform")
                print(msg)
                pass
            if platform == 'lava':
                try:
                    token = lavacontrolsconfig.get('system', 'token')
                except:
                    msg = ("Can't parse authorization token")
                    print(msg)
                    pass

            else:
                try:
                    licensekey = lavacontrolsconfig.get('system', 'licensekey')
                except:
                    msg = ("Can't parse licence key")
                    print(msg)
                    pass
            try:
                loglevel = lavacontrolsconfig.get('system', 'loglevel')
            except:
                msg = ("Can't parse log level")
                print(msg)
                pass
            try:
                proxy = lavacontrolsconfig.get('system', 'proxy')
            except:
                msg = ("Can't parse proxy")
                print(msg)
                pass
            try:
                wallmodel = lavacontrolsconfig.get('wall', 'model')
            except:
                msg = ("Can't parse wall model")
                print(msg)
                pass
            try:
                wallcount = lavacontrolsconfig.get('wall', 'count')
            except:
                msg = ("Can't parse wall count")
                print(msg)
                pass
            try:
                wallsource = lavacontrolsconfig.get('wall', 'source')
            except:
                msg = ("Can't parse wall source")
                print(msg)
                pass
            try:
                walldefaultinput = lavacontrolsconfig.get('wall', 'defaultinput')
            except:
                msg = ("Can't parse wall default input")
                print(msg)
                pass
            try:
                walldefaultmode = lavacontrolsconfig.get('wall', 'defaultmode')
            except:
                msg = ("Can't parse wall default mode")
                print(msg)
                pass
            try:
                wallwiring = lavacontrolsconfig.get('wall', 'wiring')
            except:
                msg = ("Can't parse wall wiring")
                print(msg)
                pass
            try:
                wallnumbering = lavacontrolsconfig.get('wall', 'numbering')
            except:
                msg = ("Can't parse wall wiring")
                print(msg)
                wallnumbering = wallwiring
                pass
            try:
                walllayout = lavacontrolsconfig.get('wall', 'layout')
            except:
                msg = ("Can't parse wall layout")
                print(msg)
                if wallcount == '4':
                    walllayout = '2x2'
                if wallcount == '6':
                    walllayout = '3x2'
                if wallcount == '8':
                    walllayout = '4x2'
                if wallcount == '9':
                    walllayout = '3x3'
                if wallcount == '10':
                    walllayout = '5x2'
                print(walllayout)
                pass
            try:
                wallmatrixip = lavacontrolsconfig.get('wall', 'matrixip')
            except:
                msg = ("Can't parse wall model")
                print(msg)
                pass
            try:
                networkip = {}
                ipnum = 0
                for key, val in lavacontrolsconfig.items('network'):
                    if 'ip' in key:
                        networkip[ipnum]=val
                        ipnum += 1
                print(networkip)
            except:
                msg = ("Can't parse network ip addresses")
                print(msg)
                err = traceback.format_exc()
                print(err)
                pass

    newconfig = configparser.ConfigParser()
    newconfig.add_section('system')
    newconfig.set('system','platform',platform)
    if platform == 'lava':
        newconfig.set('system','token',token)
    else:
        newconfig.set('system','licensekey',licensekey)
    newconfig.set('system','loglevel',loglevel)
    if proxy:
        newconfig.set('system','proxy',proxy)
    newconfig.add_section('wall')
    newconfig.set('wall','defaultinput',walldefaultinput)
    newconfig.set('wall','defaultmode',walldefaultmode)
    newconfig.set('wall','numbering',wallnumbering)
    newconfig.set('wall','layout',walllayout)
    if wallmatrixip:
        newconfig.set('wall','matrixip',wallmatrixip)
    newconfig.add_section('network')
    for key,val in networkip.items():
        print('IP{}={}'.format(key, val))
        newconfig.set('network','IP{}'.format(key+1),'{}'.format(val))

    with open(lavacontrolsconffile,'w') as config_file:
        newconfig.write(config_file)

if __name__ == '__main__':
   main()
