from django.shortcuts import render
from latex.models import *
from subprocess import run
from pathlib import Path
from mysrc.ajax import register_ajax
from django.http import HttpResponse

def root(request):
    from tikz.views import random_tikz
    from mpl.views import random_graph
    tz = random_tikz()
    gr = random_graph()
    return render(request, 'latex/root.html',
                  dict(
                      tikz=tz.html(width=0.50),
                      mpl=gr.html(width=0.50),
                  ))


def home(request):
    cats = [
        (c.name, Package.objects.filter(category=c)) for c in Category.objects.all()
    ]
    templates = Template.objects.all()

    return render(
        request,
        'latex/home.html',
        {
            'categories': cats,
            'templates': templates,
        },
    )


def packages(request):
    cats = [
        (c.name, Package.objects.filter(category=c)) for c in Category.objects.all()
    ]
    return render(
        request,
        'latex/packages.html',
        {
            'categories': cats,
        },
    )


def category(request, category):
    cat = Category.objects.get(name=category)
    return render(
        request,
        'latex/category.html',
        {
            'category': category,
            'packages': Package.objects.filter(category=cat),
        },
    )


def package(request, package):
    """
    The package argument could be a string or an id number
    """
    try:
        pk = int(package)
        p = Package.objects.get(id=pk)
    except:
        p = Package.objects.get(name=package)

    categories = p.category.all()
    subs = Package.objects.filter(category__in=categories)
    return render(request, 'latex/package.html',
                  {'package': p, 'ajax': 'latex', 'subpackages': subs})


def templates(request):
    ts = Template.objects.all()
    return render(request, 'latex/templates.html', {'templates': ts})


def template(request, key):
    try:
        t = Template.objects.get(name=key)
    except:
        try:
            t = Template.objects.get(id=int(key))
        except:
            print(f"Failed to load Template for key {key}")

    code = str(t.template)
    packages = []
    for packname in t.packages.split(','):
        package = Package.objects.get(name=packname)
        packages.append(package.code)
    code = code.replace("{{ packages }}", "\n".join(packages))

    return render(
        request,
        'latex/template.html',
        {
            'template': t,
            'code': code,
        },
    )

#@register_ajax()
def doc(request, package):
    """
    Attempt to load documentation from texdoc
    """
    #package = args['package']
    res = run(['texdoc', '-l', '-I', package], capture_output=True)
    text = res.stdout.decode('utf8')
    filename = text.split('\n')[0]
    path = Path(filename.split(' ')[-1])
    if path.exists():
        bits = open(path, 'rb').read()
        resp = HttpResponse(bits, content_type="application/pdf")
        #resp['Content-Disposition'] = 'attachment; filename="{0}.pdf"'.format(
        #    self.name)
        return resp
    return dict(result="done")
