#!/usr/bin/python3
# Start with python cbp-server.py -H 134.158.154.15 -d


import datetime
import os
import daemon_servers
#import cbp.cbp_instrument
#import cbp.keithley as Keithley
import cbp.keithley_stardice as keithley
import cbp.spectrograph
import cbp.filter_wheel
#import cbp.laser_update as laser
import cbp.nt252 as laser
#import cbp.flipper
#import cbp.newportrotator 
#import cbp.mount as mount
from threading import Thread
import cbp.newportconex
import cbp.nexstar

def main(options, args):
    threads = [Thread(target=server.main, args=(options,args)) for server in servers]
    for t in threads:
        t.start()
    for t in threads:
        t.join()

if __name__ == "__main__":
    import optparse 
    parser = optparse.OptionParser(usage="%prog [-l log] [-d]")
    parser.add_option('-d', '--daemon', default=False, 
                      action='store_true', 
                      help='Run as a background daemon')
#    parser.add_option('--dummy', default=False, 
#                      action='store_true', 
#                      help='Run a fake instance instead')
    parser.add_option('-p', '--port', default=8011, 
                      action='store', type='int', 
                      help='Listen on port')
    parser.add_option('-H', '--hostname', default='localhost', 
                      action='store', 
                      help='server address')
    (options, args) = parser.parse_args()
    
    SERVER_HOSTNAME = options.hostname
    SERVER_PORT = options.port
    
    name = 'cbp-server'
    daemon_servers.setup_logging(name)
         
    #cbp_inst = cbp.cbp_instrument.CBP(altaz=False, filter_wheel=True, keithley=True, flipper=True, spectrograph=True, laser=False)
    components = {#'keithley': (Keithley.Keithley(resnum=1), 1),
        'keithley': (keithley.Keithley6514(dev='/dev/ttyUSB.KEITHLEY', baudrate=57600), 1),
        'spectro': (cbp.spectrograph.Spectrograph(), 2),
        #'filterwheel': (cbp.filter_wheel.FilterWheel(), 4),
        'laser': (laser.LaserSerialInterface(port='/dev/ttyACM.LASER'), 3),
        'laserwheel': (cbp.newportconex.NewportConex('/dev/ttyUSB.filterwheel'), 4),
        #'flipper': (cbp.flipper.Flipper(), 5),
        #'ndfilter': (cbp.newportrotator.NSR1(port='/dev/ttyUSB0'), 5),
        'mount': (cbp.nexstar.Nexstar('/dev/ttyUSB.cbpmount'), 0),
    }
    servers = [daemon_servers.BasicServer((SERVER_HOSTNAME, SERVER_PORT+components[name][1]), name, components[name][0]) for name in components]
    
    if options.daemon:
        daemon_servers.daemonize(options, args, main)
    else:
        main(options, args)
