from django.shortcuts import render
from latex.models import *


def root(request):
    return render(request, 'latex/root.html')


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)

    return render(request, 'latex/package.html', {'package': p})


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,
        },
    )
