from __future__ import annotations

from typing import Dict

from django.conf import settings
from django.http import Http404, HttpRequest, HttpResponse
from django.shortcuts import render

from .forms import SearchForm
from . import services


# Removed tabs - all content now shown on single page


def _is_htmx(request: HttpRequest) -> bool:
    return request.headers.get("HX-Request", "").lower() == "true"


def search(request: HttpRequest) -> HttpResponse:
    form = SearchForm(request.GET or None)
    results = None
    order_by = request.GET.get("order", "rank")  # "rank" or "alpha"
    
    if form.is_valid():
        query = form.cleaned_data.get("query", "").strip()
        if query and len(query) >= 2:
            results = services.search(query, order_by=order_by)

    context = {"form": form, "results": results, "order_by": order_by}

    if _is_htmx(request):
        return render(request, "uksi_browser/search_results.html", context)
    return render(request, "uksi_browser/search.html", context)


def browse(request: HttpRequest) -> HttpResponse:
    order_by = request.GET.get("order", "rank")  # "rank" or "alpha"
    roots = services.browse_roots(order_by=order_by)
    
    context = {
        "nodes": roots,
        "parent_taxon_id": None,
        "order_by": order_by,
    }
    return render(request, "uksi_browser/browse.html", context)


def browse_node(request: HttpRequest, taxon_id: str) -> HttpResponse:
    order_by = request.GET.get("order", "rank")  # "rank" or "alpha"
    nodes = services.browse_children(taxon_id, order_by=order_by)
    context = {"nodes": nodes, "parent_taxon_id": taxon_id, "order_by": order_by}
    template = "uksi_browser/browse_node.html"
    return render(request, template, context)


def taxon_detail(request: HttpRequest, taxon_id: str) -> HttpResponse:
    order_by = request.GET.get("order", "rank")  # "rank" or "alpha"
    is_modal = request.GET.get("modal", "").lower() == "true"
    
    detail = services.get_taxon_detail(taxon_id, order_by=order_by)
    if not detail:
        raise Http404("Taxon not found")

    context = {
        "detail": detail,
        "order_by": order_by,
    }

    # Use modal template if requested, otherwise use full page template
    template = "uksi_browser/taxon_detail_modal.html" if is_modal else "uksi_browser/taxon_detail.html"
    return render(request, template, context)
