from __future__ import absolute_import
import os

# get is_CASA6 and is_python3
from casatasks.private.casa_transition import *
if is_CASA6:
    from casatools import vlafiller, ms, agentflagger, table
    from casatasks import casalog
    from .mstools import write_history

    _ms = ms( )
    _filler = vlafiller( )
else:
    from taskinit import casac, casalog
    from taskinit import tbtool as table
    from mstools import write_history

    _filler = casac.vlafillertask()
    _ms = casac.ms()

    agentflagger = casac.agentflagger

def importvla(archivefiles,vis,bandname,frequencytol,project,starttime,
              stoptime,applytsys,autocorr,antnamescheme,keepblanks,evlabands):
    i=0
    overwrite=True
    ok = True
    try:
        casalog.origin('importvla')
        if ((type(vis)!=str) | (vis=='') | (os.path.exists(vis))):
            raise ValueError('Need valid visibility file name (bad name or already exists)')
        if (os.path.exists(vis)):
            raise ValueError('Visibility file already exists - remove or rename')
        for archivefile in archivefiles:
            if i>0: overwrite=False
            if ((type(archivefile)==str) & (os.path.exists(archivefile))):
                _filler.fill( msname=vis,inputfile=archivefile,overwrite=overwrite,
                              bandname=bandname,freqtol=frequencytol,project=project,
                              start=starttime,stop=stoptime,applytsys=applytsys,
                              keepautocorr=autocorr,antnamescheme=antnamescheme,
                              keepblanks=keepblanks,evlabands=evlabands )
                i += 1
            else:
                raise ValueError('Archive file not found - please verify the name')
    except Exception as exc:
        msg = "*** Error importing %s to %s: %s" % (archivefiles, vis, exc)
        raise RuntimeError(msg)

    nrows = 0
    try:
        _tb = table()
        ok &=_tb.open(vis)
        nrows =  _tb.nrows()
        _tb.done()
    except Exception:
        msg = "*** Error checking size of visibility file %s: %s" % (vis,instance)
        raise RuntimeError(msg)

    if nrows == 0:
        msg = "*** visibility file is empty: %s" % vis
        raise Exception(msg)

    # Write history
    try:
        param_names = importvla.__code__.co_varnames[:importvla.__code__.co_argcount]
        if is_python3:
            vars = locals( )
            param_vals = [vars[p] for p in param_names]
        else:
            param_vals = [eval(p) for p in param_names]
        ok &= write_history(_ms, vis, 'importvla', param_names,param_vals, casalog)
    except Exception as instance:
        casalog.post("*** Error \'%s\' updating HISTORY" % instance, 'WARN')

    # write initial flag version
    if ok:
        try:
            _af = agentflagger()
            ok &= _af.open(vis);
            ok &= _af.saveflagversion('Original', comment='Original flags at import into CASA', merge='replace')
            ok &= _af.done();
        except Exception:
            msg = "*** Error writing initial flag version of %s: %s" % (vis, instance)
            raise RuntimeError(msg)