import scheduler
from stardice import configfiles
from glob import glob
import astropy.io.fits as pyfits
import logging
logging.basicConfig(format='%(asctime)s %(message)s', level=logging.DEBUG)
import numpy as np
from notification import notify

outdir = 'wlratio/'

sbig_pos = 29500
zwo_pos = 91500

config = configfiles.Config('spectro_bench.cfg')

sched = scheduler.Scheduler(config)
sched.sbig.set_filter('EMPTY')

d = sched.get_default()

leds = np.load('../drivers/ardice/led16_1.npy')

d['sbig.EXPTIME'] = 1.0
d['sbig.FILTER'] = 'IDLE'
d['zwo.exptime'] = 1.0

workpoint = [1500, 1000, 340, 313, 431, 387, 1000, 1000, 900, 900,
            1000, 1000, 1000, 2000, 2000, 2000]

notify('wavelength scan started')
try:
    for led in leds:
        d['xy.x'] = int(zwo_pos)
        d['ar.led'] = int(led['led'])
        d['ar.iled'] = int(workpoint[led['led']])
        #if led['led'] > 9:
        #    d['ar.iled'] = 3*d['ar.iled']
        d['mono.grating'] = 3  if led['led'] > 5 else 2
        d['ar.shutter'] = 'close'
        d['sbig'] = True
        d['zwo'] = True
        for i in range(30):
            sched.shoot(d, outdir)
        d['ar.shutter'] = 'open'
        d['sbig'] = False
        for wavelen in range(led['wlmin'], led['wlmax']):
            d['mono.wavelength'] = int(wavelen)
            sched.shoot(d, outdir)
            sched.shoot(d, outdir)
            d['zwo.exptime'] = .1
            sched.shoot(d, outdir)
            sched.shoot(d, outdir)
            d['zwo.exptime'] = 1.0
        d['sbig'] = True
        d['zwo'] = False
        d['xy.x'] = int(sbig_pos)
        for wavelen in range(led['wlmin'], led['wlmax']):
            d['mono.wavelength'] = int(wavelen)
            sched.shoot(d, outdir)
            sched.shoot(d, outdir)
            d['zwo.exptime'] = .1
            sched.shoot(d, outdir)
            sched.shoot(d, outdir)
            d['zwo.exptime'] = 1.0
    
        d['sbig'] = False
        d['zwo'] = True
        d['xy.x'] = int(zwo_pos)
        for wavelen in range(led['wlmin'], led['wlmax']):
            d['mono.wavelength'] = int(wavelen)
            sched.shoot(d, outdir)
            sched.shoot(d, outdir)
        d['ar.shutter'] = 'close'
        d['sbig'] = True
        d['zwo'] = True
        for i in range(10):
            sched.shoot(d, outdir)
finally:
    notify('Wavelength scan stopped')
        
#wl = [pyfits.getheader(i)['wavelength'] for i in l[-32:]]
#g = [pyfits.getheader(i)['grating'] for i in l[-32:]]
#f = [pyfits.getdata(i).sum() for i in l[-32:]]
