import matplotlib.pyplot as plt
import numpy as np
import scipy as sp
import subprocess
import os
import re
from pathlib import Path


HOME = Path(__file__).parent.parent

if __name__ == "__main__":
    import django
    import sys

    sys.path.insert(0, str(HOME))
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysrc.settings')
    django.setup()


TEMPLATE = r"""
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

traces = [
    (0.5,0,0),
    (0, 0, 0.5),
    (0, 0.5, 0),
    (0.5, 0.5, 0),
    (0.4, 0.3, 0),
]

figsize=(5, 3.75)

"""


def generate(graph):
    """
    Attempt to generate the thumbnail
    """
    from mpl.models import Graph

    ext = '.webp'

    filename = os.path.join('/Users/saeta/tmp/mpl', f'graph-{graph.id}')
    code = TEMPLATE + graph.code
    m = re.search(r"\.save\((.)([^.]*)", code)
    if m:
        ext = code[m.end():m.end()+6]
        if '"' in ext:
            ext = ext.split('"')[0]
        elif "'" in ext:
            ext = ext.split("'")[0]
        code = code.replace(m.group(2), filename)
    else:
        code += "\n\nplt.gcf().savefig('%s%s')" % (filename, ext)

    open(filename + ".py", 'w').write(code)
    res = subprocess.run(
        [
            'python3',
            f"{filename}.py",
        ],
        capture_output=True,
    )
    if res.returncode == 0:
        return dict(graphic=open(f"{filename}{ext}", "rb").read(),
                    ext=ext)
        #return dict(png=open(f"{filename}.png", "rb").read())

    else:
        return dict(error=res.stderr.decode('utf-8'))


if __name__ == "__main__":
    from mpl.models import Graph
    g = Graph.objects.all()[0]
    g.save()
