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
import os

outdir = '../data/spectro_bench/zwo_qe'
if not os.path.exists(outdir):
    os.mkdir(outdir)


dkd_pos = 145000
zwo_pos = 92140

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

sched = scheduler.Scheduler(config)


d = sched.get_default()

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

d['zwo.exptime'] = 1.0
d['phd.range'] = 2e-5
d['phd.nsamples'] = 10
d['dkd.range'] = 2e-10
d['dkd.nsamples'] = 10

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:
        notify(f'Starting led {led}')
        d['xy.x'] = int(zwo_pos)
        d['ar.led'] = int(led['led'])
        d['ar.iled'] = int(workpoint[led['led']])
        d['mono.grating'] = 3  if led['led'] > 5 else 2
        d['ar.shutter'] = 'close'
        d['zwo'] = True
        for i in range(30):
            sched.shoot(d, outdir)
        d['ar.shutter'] = 'open'
        for wavelen in range(led['wlmin'], led['wlmax']):
            d['mono.wavelength'] = int(wavelen)
            sched.shoot(d, outdir)
            sched.shoot(d, outdir)
        d['xy.x'] = int(dkd_pos)
        d['ar.shutter'] = 'close'
        for i in range(10):
            sched.shoot(d, outdir)
        d['ar.shutter'] = 'open'            
        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'
        for i in range(10):
            sched.shoot(d, outdir)
        d['ar.shutter'] = 'open'
        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'
        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:]]
