from runpy import run_path

import matplotlib.pyplot as plt

from fluiddyn.util import has_to_be_made as _has_to_be_made

from util import tmp_dir, has_to_save, here


def has_to_be_made(name, sources: list):
    if not isinstance(name, str):
        names = name
        return any(has_to_be_made(name, sources) for name in names)
    if isinstance(sources, str):
        sources = [sources]
    sources.append("util.py")
    if not any(name.endswith(ext) for ext in (".png", ".tex")):
        name += ".png"
    return _has_to_be_made(tmp_dir / name, sources, source_dir=here)


def make_fig(name, source=None):
    if source is None:
        source = f"save_{name}.py"
    fig_name = f"{name}.png"
    if has_to_be_made(fig_name, source):
        print(f"Calling {source} to make {fig_name}")
        run_path(str(here / source))


def make_table(name, source=None):
    if source is None:
        source = f"save_table_{name}.py"
    if has_to_be_made(f"table_{name}.tex", source):
        print(f"Calling {source} to make {name}")
        run_path(str(here / source))

make_fig("forcing_vs_time")

make_table("better_simuls")

make_fig("figure2")
make_fig("figure3")
make_fig("figure5")
make_fig("figure6")
make_fig("figure7")
make_fig("figure8")
make_fig("figure9")
make_fig("figure10")
make_fig("figure11")
make_fig("figure12")
make_fig("figure13")
make_fig("figure14")
make_fig("figure15")
make_fig("figure16")
make_fig("figure17")

"""
for n in (1, 17):
    if n not in [1,4]:
        make_fig(f"figure{n}")
"""

if not has_to_save:
    plt.show()