"""
script to connect filterbank files

headers are automatically generated mock information, alter if necessary
"""
import your
import logging
import numpy as np
import os
__author__ = "Harry Qiu"
from your.formats.filwriter import make_sigproc_object
from astropy.coordinates import SkyCoord
from astropy import units as u
# filelist=np.loadtxt("filelist",dtype='str')

def _main():
    from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter
    parser = ArgumentParser(description='Script description', formatter_class=ArgumentDefaultsHelpFormatter)
    parser.add_argument('-v', '--verbose', dest='verbose', action='store_true', help='Be verbose')
    parser.add_argument('-o', '--output', type=str, default="test", help='Output File Name')

    parser.add_argument(dest='files', nargs='+')
    parser.set_defaults(verbose=False)
    values = parser.parse_args()
    seg=values.segments
    filname=values.output
    write_filterbanks(list(sorted(values.files)),f"{filname}_.fil")




def write_filterbanks(files,filname,total_length=0,name = None):
    from your.formats.filwriter import make_sigproc_object
    cached_total_length = total_length
    for i,filename in enumerate(files):
        fbank= your.Your(filename)
        if i ==0:
            print()
            c=SkyCoord(ra=fbank.ra_deg*u.deg,dec=fbank.dec_deg*u.deg)
            raj=c.ra.to_string(u.hourangle,precision=2,sep=':')
            decj=c.dec.to_string(u.deg,precision=2,sep=':')
            newdata=make_sigproc_object(rawdatafile=filname,
                                        telescope_id = 21, # FAST according to PRESTO
                                        source_name = name or (fbank.source_name.decode() if isinstance(fbank.source_name, bytes) else fbank.source_name),
                                        nchans = fbank.nchans,
                                        foff = fbank.foff,
                                        fch1 = fbank.fch1,
                                        tsamp =fbank.native_tsamp,
                                        tstart = fbank.tstart,
                                        nbits=8,
                                        src_raj=raj, # HHMMSS.SS
                                        src_dej=decj, # DDMMSS.SS
                                        machine_id=0,
                                        nbeams=1,
                                        ibeam=0,
                                        nifs=1,
                                        barycentric=0,
                                        pulsarcentric=0,
                                        data_type=0,
                                        az_start=-1,
                                        za_start=-1
                                        )
            newdata.write_header(filname)
        total_length = fbank.nspec
        print(filename)
        totaldata=fbank.get_data(nstart=0,nsamp=total_length) ### TOTAL FAST DATA IS 1024 * 64 SUBINTS
        ### reads out stokes I data
        ### this step reads all subints to merge into one datachunk, can't stop printing subint readouts
        newdata.append_spectra(totaldata.astype(np.int8),filname)

# Silence the Polarization is AABB..." spam
logger = logging.getLogger(your.formats.psrfits.__name__)
class NoPolWarningFilter(logging.Filter):
    parsed = False
    def filter(self, record):
        returnVal = record.getMessage().startswith('Polarization is ')
        if returnVal:
            if not self.parsed:
                self.parsed = True
            else:
                return False
        return True
logger.addFilter(NoPolWarningFilter())

if __name__ == '__main__':
    _main()