from .Plotter import Plotter
from .Args import Args
from pathlib import PurePath 
import natsort
import os

manual_plot=True
save_result=True

def dump(filename, var=[None], mval=[None]):
    Plot = Plotter()
    args = Args([filename], Plot.dump, var, mval, oname=[None], out=[None])

    Plot.set(args, if_manual_plot=manual_plot, if_save_result=save_result)
    Plot.dump()

def plot(filename, out = './', oname = [None], var=[None], mval=[None], min_y = None, max_y = None, ifTranspose=False):
    Plot = Plotter()
    args = Args([filename], Plot.plot, var=var, mval=mval, oname=oname, out=out, ifTranspose=ifTranspose)
    Plot.set(args, if_manual_plot=manual_plot, if_save_result=save_result)
    Plot.plot()

def joint_plot(filename, out = './', oname = [None], var=[None], mval=[None], min_y = None, max_y = None, ifTranspose=False):
    Plot = Plotter()
    args = Args([filename], Plot.joint_plot, var=var, mval=mval, oname=oname, out=out, ifTranspose=ifTranspose)
    Plot.set(args, if_manual_plot=manual_plot, if_save_result=save_result)
    Plot.joint_plot()

def multiple_plot(filename, out = './', oname = 'fig.png', var=[None], mval=[None], min_y = None, max_y = None, ifTranspose=False, linewidth = None, legend = None, colors = None, dpi=None, line_type = None):
    Plot = Plotter()
    args = Args(filename, Plot.multiple_plot, var=var, mval=mval, oname=oname, out=out, ifTranspose=ifTranspose, linewidth=linewidth, legend=legend, colors=colors, dpi=dpi, line_type=line_type)
    Plot.set(args, if_manual_plot=manual_plot, if_save_result=save_result)
    return Plot.multiple_plot()

def ani_plot(filename, out = './', oname = 'fig.gif', var=[None], mval=[None], min_y = None, max_y = None, ifTranspose=False):
    pp = str(PurePath(filename).parent) + '/'
    name = str(PurePath(filename).name )
    command = 'find ' + pp + ' -name ' + "'" + name + "'"
    output_stream = os.popen(command)
    out_res = output_stream.read().split('\n')[0:-1]
    output_stream.close()
    names = natsort.natsorted(out_res,reverse=False)

    Plot = Plotter()
    args = Args(names, Plot.ani_plot, var=var, mval=mval, oname=oname, out=out, min_y=min_y, max_y=max_y, ifTranspose=ifTranspose)
    Plot.set(args, if_manual_plot=manual_plot, if_save_result=save_result)
    Plot.ani_plot()

def plot_contour(filename, out = './', oname = [None], var=[None], mval=[None], min_y = None, max_y = None, levels=None, ifTranspose=False):
    Plot = Plotter()
    args = Args([filename], Plot.plot_contour, var=var, mval=mval, oname=oname, out=out, min_y=min_y, max_y=max_y, levels=levels, ifTranspose=ifTranspose)
    Plot.set(args, if_manual_plot=manual_plot, if_save_result=save_result)
    Plot.plot_contour()

def ani_plot_contour(filename, out = './', oname = [None], var=[None], mval=[None], min_y = None, max_y = None, ifTranspose=False):
    pp = str(PurePath(filename).parent) + '/'
    name = str(PurePath(filename).name )
    command = 'find ' + pp + ' -name ' + "'" + name + "'"
    output_stream = os.popen(command)
    out_res = output_stream.read().split('\n')[0:-1]
    output_stream.close()
    names = natsort.natsorted(out_res,reverse=False)

    Plot = Plotter()
    args = Args(names, Plot.ani_plot_contour, var=var, mval=mval, oname=oname, out=out, min_y=min_y, max_y=max_y, ifTranspose=ifTranspose)
    Plot.set(args, if_manual_plot=manual_plot, if_save_result=save_result)
    Plot.ani_plot_contour()

def avg_plot(filename, out = './', oname = 'fig.png', var=[None], mval=[None], ifTranspose=False):
    Plot = Plotter()
    args = Args([filename], Plot.avg_plot, var=var, mval=mval, oname=oname, out=out, ifTranspose=ifTranspose)
    Plot.set(args, if_manual_plot=manual_plot, if_save_result=save_result)
    Plot.avg_plot()

def slice(filename, plane_type = 'xy', slice_position = 0, out = './', oname = [None], var=[None], mval=[None], min_y = None, max_y = None, ifTranspose=False):
    Plot = Plotter()
    args = Args([filename], Plot.slice, var=var, mval=mval, oname=oname, out=out, plane_type=plane_type, slice_position=slice_position, ifTranspose=ifTranspose)
    Plot.set(args, if_manual_plot=manual_plot, if_save_result=save_result)
    Plot.slice()

def ani_slice(filename, plane_type = 'xy', slice_position = 0, out = './', oname = [None], var=[None], mval=[None], min_y = None, max_y = None, ifTranspose=False):
    pp = str(PurePath(filename).parent) + '/'
    name = str(PurePath(filename).name )
    command = 'find ' + pp + ' -name ' + "'" + name + "'"
    output_stream = os.popen(command)
    out_res = output_stream.read().split('\n')[0:-1]
    output_stream.close()
    names = natsort.natsorted(out_res,reverse=False)
    
    Plot = Plotter()
    args = Args(names, Plot.ani_slice, var=var, mval=mval, oname=oname, out=out, plane_type=plane_type, slice_position=slice_position, ifTranspose=ifTranspose)
    Plot.set(args, if_manual_plot=manual_plot, if_save_result=save_result)
    Plot.ani_slice()

def plot_diff(filename, ndim, out = './', oname = 'fig.png', var=[None], mval=[None], ifTranspose=False):
    Plot = Plotter()
    args = Args(filename, Plot.plot_diff, var=var, mval=mval, oname=oname, out=out, ndim=ndim, ifTranspose=ifTranspose)
    Plot.set(args, if_manual_plot=manual_plot, if_save_result=save_result)
    Plot.plot_diff()

def get_data(filename, ndim):
    Plot = Plotter()
    args = Args([filename], Plot.get_data, ndim=ndim)
    Plot.set(args, if_manual_plot=manual_plot, if_save_result=save_result)
    data = Plot.get_data()
    return data