#! /usr/bin/env python3

import subprocess
import sys
sys.path.append('./data/scripts/python_wrapper/sixtesoft/')
import sixte

sixte.check_pythonversion(3, 6)

from astropy.io import fits

def check_dummy_xml(file,tool):
    with  fits.open(file) as hdul:
        data = hdul[1].data

        status = 0

        mrawx = data.field('rawx').mean()
        if abs(mrawx-4) > 1e-9:
            print( ' *** error : RAWX should be always 4, but is {:0.6f} on average'.format(mrawx))
            status = 1

        # RAWY has to be off, as a few counts are during the readout ('readout streak'), which
        # is in this direction
        mrawy = data.field('rawy').mean()
        if abs(mrawy-4) < 1e-9:
            print( ' *** error : RAWY should be slightly off from 4, but is exactly 4')
            status = 1

        if abs(mrawy-4) > 0.5:
            print( ' *** error : RAWY should be close to value 4, but with {:0.6f} it is too far off'.format(mrawy))
            status = 1

    if status != 0:
        exit(1)
    else:
        print(f'{tool}: checking RAWX/Y from dummy XML File SUCCESSFUL')
        return 0



# TEST OPTIONS

xmllist = [sixte.STDTEST.xml, sixte.STDTEST.xml_eventmode]
testlist = ['timemode', 'eventmode']

implist = sixte.defpath().ref_path + \
        sixte.defpath(testname = 'phoimg_e2e').refname_implist

for ii in range(len(xmllist)):

    defpath = sixte.defpath(testname = "gendetsim_e2e", subtestname = testlist[ii])

    print(f'   *** testing {defpath.testname}  *** ')

    ret_val = sixte.gendetsim(implist,
                              defpath.testname_rawlist,
                              xmllist[ii],
                              logfile=defpath.log,
                              test=True)

    sixte.check_returncode(ret_val, defpath.fullname)

    sixte.check_fdiff(defpath.ref_path + defpath.refname_rawlist,
                      defpath.testname_rawlist,
                      defpath.fullname)
    
    if testlist[ii] == 'timemode':
        check_dummy_xml(defpath.testname_rawlist, defpath.fullname)


# clean output
sixte.clean_output()



# # STANDARD TEST: TIME READOUT
# ret_val = sixte.gendetsim(fin,fout,defvar.xml,
#                        logfile=defvar.log,
#                        test=True)
# 
# # initialize default variables
# defvar = sixte.defvar
# tool = 'GENDETSIM'
# 
# fin  = f"data/refdata/{defvar.prefix_refdata}{defvar.fname_implist}"
# fout = f"{defvar.prefix_dummy}{defvar.fname_rawlist}"
# 
# reffile1=f"data/refdata/{defvar.prefix_refdata}{defvar.fname_rawlist}"
# reffile2=f"data/refdata/{defvar.prefix_refdata}raw_eventreadout.fits"









