from __future__ import absolute_import
import os

from casatasks.private.casa_transition import *
if is_CASA6:
    from casatools import calibrater, table, ms
    from casatasks import casalog
    from .mstools import write_history
    from .parallel.parallel_data_helper import ParallelDataHelper
    from .parallel.parallel_task_helper import ParallelTaskHelper
else:
    from taskinit import cbtool as calibrater
    from taskinit import tbtool as table
    from taskinit import mstool as ms
    from taskinit import casalog
    from mstools import write_history
    from parallel.parallel_data_helper import ParallelDataHelper
    from parallel.parallel_task_helper import ParallelTaskHelper

def clearcal(
    vis=None,
    field=None,
    spw=None,
    intent=None,
    addmodel=None,
    ):

    casalog.origin('clearcal')

    # Do the trivial parallelization
    if ParallelDataHelper.isMMSAndNotServer(vis):
        helper = ParallelTaskHelper('clearcal', locals())
        helper.go()
        return

    # Local versions of the tools
    tblocal = table()
    cblocal = calibrater()
    mslocal = ms()

    # we will initialize scr cols only if we don't create them
    doinit = False

    if (type(vis) == str) & os.path.exists(vis):
        tblocal.open(vis)
        doinit = tblocal.colnames().count('CORRECTED_DATA') > 0
        tblocal.close()

        # We ignore selection if creating the scratch columns
        if not doinit:
            casalog.post('Need to create scratch columns; ignoring selection.')

        cblocal.setvi(old=True,quiet=False);  # Old VI for now
        cblocal.open(vis, addmodel=addmodel)
    else:
        raise Exception('Visibility data set not found - please verify the name')

    # If necessary (scr col not just created), initialize scr cols
    if doinit:
        cblocal.selectvis(field=field, spw=spw, intent=intent)
        cblocal.initcalset(1)
    cblocal.close()

    # Write history to the MS
    if is_python3:
        vars = locals( )
        param_names = clearcal.__code__.co_varnames[:clearcal.__code__.co_argcount]
        param_vals = [vars[p] for p in param_names]
    else:
        param_names = clearcal.__code__.co_varnames[:clearcal.__code__.co_argcount]
        param_vals = [eval(p) for p in param_names]

    casalog.post('Updating the history in the output', 'DEBUG1')
    write_history(mslocal, vis, 'clearcal', param_names,
                  param_vals, casalog)