from django.views.generic import TemplateView

from .models import TabbedPage


class TabbedPageView(TemplateView):
    template_name = "tabbed_page/tabbed_page.html"
    _page = None
    _active_tab = None

    @property
    def tabs(self):
        return self.page.tabs.all().order_by('position')

    @property
    def page(self):
        if self._page is None:
            name = self.kwargs.get('name')

            # TODO: check if name can ever be empty string
            # if not, can just put default in get() above
            if not name:
                name = 'main'

            self._page = TabbedPage.objects.get(name=name)

        return self._page

    @property
    def active_tab(self):
        if self._active_tab is None:
            candidates = []
            tab_name = self.kwargs.get('tab_name')
            if tab_name:
                candidates = self.page.tabs.filter(name=tab_name)
            if len(candidates) == 0:
                candidates = self.page.tabs.filter(default=True)
            if len(candidates) == 0:
                candidates = self.page.tabs.all()
            if len(candidates) > 0:
                self._active_tab = candidates[0]
        return self._active_tab