from subsystems import Subsystem
import ardice
import time

class ArdiceOneLED(Subsystem):
    expected_params = {'led': 5,
                       'iled': 5000,
                       'shutter': 'open'}
    def _config(self):
        self.ar = ardice.Ardice(self.config.ip, self.config.port, debug=False)
        self.ar.open()
        self.ar.all_led_off()
        #for l in range(16):
        #    self.ar.led_off(l)
        self._led = -1
        self._curr = 0
        self.close()
        
    def close(self):
        self.ar.sclose()
        self._shutt = 'closed'
        
    def open(self):
        self.ar.sopen()
        self._shutt = 'open'
        
    def led(self, l, c, wait=False):
        sleep=False
        if l != self._led:
            if self._led != -1:
                self.ar.led_off(self._led)
            self.ar.led_on(l, c)
            sleep=True
            self._led, self._curr = l, c
        elif c != self._curr:
            self.ar.led_on(l, c)
            #time.sleep(self.config.sleep)
            self._curr = c
            sleep = True
        if sleep and wait:
            time.sleep(self.config.sleep)
        
    def before_exposure(self, exposure, fitsbuilder):
        res = self._process_params(exposure)
        self.led(int(res['led']), int(res['iled']))
        if res['shutter'] == 'open':
            self.open()
        elif res['shutter'] == 'close':
            self.close()
            
    def _extended_status(self):
        return {'ARLED': self._led,
                'ARILED': self._curr,
                'ARSHUT': self._shutt}
